ZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlic2hsZXgudGV4IGIvRG9jL2xpYi9saWJzaGxleC50ZXgKaW5kZXggZWVjZGVkNy4uYzBjNGU1NiAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJzaGxleC50ZXgKKysrIGIvRG9jL2xpYi9saWJzaGxleC50ZXgKQEAgLTQsMjYgKzQsMTYgQEAKIFxkZWNsYXJlbW9kdWxle3N0YW5kYXJkfXtzaGxleH0KIFxtb2R1bGVzeW5vcHNpc3tTaW1wbGUgbGV4aWNhbCBhbmFseXNpcyBmb3IgXFVOSVhcIHNoZWxsLWxpa2UgbGFuZ3VhZ2VzLn0KIFxtb2R1bGVhdXRob3J7RXJpYyBTLiBSYXltb25kfXtlc3JAc25hcmsudGh5cnN1cy5jb219CitcbW9kdWxlYXV0aG9ye0d1c3Rhdm8gTmllbWV5ZXJ9e25pZW1leWVyQGNvbmVjdGl2YS5jb219CiBcc2VjdGlvbmF1dGhvcntFcmljIFMuIFJheW1vbmR9e2VzckBzbmFyay50aHlyc3VzLmNvbX0KK1xzZWN0aW9uYXV0aG9ye0d1c3Rhdm8gTmllbWV5ZXJ9e25pZW1leWVyQGNvbmVjdGl2YS5jb219CiAKIFx2ZXJzaW9uYWRkZWR7MS41LjJ9CiAKIFRoZSBcY2xhc3N7c2hsZXh9IGNsYXNzIG1ha2VzIGl0IGVhc3kgdG8gd3JpdGUgbGV4aWNhbCBhbmFseXplcnMgZm9yCiBzaW1wbGUgc3ludGF4ZXMgcmVzZW1ibGluZyB0aGF0IG9mIHRoZSBcVU5JWHt9IHNoZWxsLiAgVGhpcyB3aWxsIG9mdGVuCi1iZSB1c2VmdWwgZm9yIHdyaXRpbmcgbWluaWxhbmd1YWdlcywgZS5nLlwgaW4gcnVuIGNvbnRyb2wgZmlsZXMgZm9yCi1QeXRob24gYXBwbGljYXRpb25zLgotCi1cYmVnaW57Y2xhc3NkZXNjfXtzaGxleH17XG9wdGlvbmFse3N0cmVhbVxvcHRpb25hbHssIGZpbGV9fX0KLUEgXGNsYXNze3NobGV4fSBpbnN0YW5jZSBvciBzdWJjbGFzcyBpbnN0YW5jZSBpcyBhIGxleGljYWwgYW5hbHl6ZXIKLW9iamVjdC4gIFRoZSBpbml0aWFsaXphdGlvbiBhcmd1bWVudCwgaWYgcHJlc2VudCwgc3BlY2lmaWVzIHdoZXJlIHRvCi1yZWFkIGNoYXJhY3RlcnMgZnJvbS4gSXQgbXVzdCBiZSBhIGZpbGUtIG9yIHN0cmVhbS1saWtlIG9iamVjdCB3aXRoCi1cbWV0aG9ke3JlYWQoKX0gYW5kIFxtZXRob2R7cmVhZGxpbmUoKX0gbWV0aG9kcy4gIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLAotaW5wdXQgd2lsbCBiZSB0YWtlbiBmcm9tIFxjb2Rle3N5cy5zdGRpbn0uICBUaGUgc2Vjb25kIG9wdGlvbmFsIAotYXJndW1lbnQgaXMgYSBmaWxlbmFtZSBzdHJpbmcsIHdoaWNoIHNldHMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlCi1cbWVtYmVye2luZmlsZX0gbWVtYmVyLiAgSWYgdGhlIHN0cmVhbSBhcmd1bWVudCBpcyBvbWl0dGVkIG9yCi1lcXVhbCB0byBcY29kZXtzeXMuc3RkaW59LCB0aGlzIHNlY29uZCBhcmd1bWVudCBkZWZhdWx0cyB0byBgYHN0ZGluJycuCi1cZW5ke2NsYXNzZGVzY30KLQorYmUgdXNlZnVsIGZvciB3cml0aW5nIG1pbmlsYW5ndWFnZXMsIChlLmcuIGluIHJ1biBjb250cm9sIGZpbGVzIGZvcgorUHl0aG9uIGFwcGxpY2F0aW9ucykgb3IgZm9yIHBhcnNpbmcgcXVvdGVkIHN0cmluZ3MuCiAKIFxiZWdpbntzZWVhbHNvfQogICBcc2VlbW9kdWxle0NvbmZpZ1BhcnNlcn17UGFyc2VyIGZvciBjb25maWd1cmF0aW9uIGZpbGVzIHNpbWlsYXIgdG8gdGhlCkBAIC0zMSwxNiArMjEsNTAgQEAKIFxlbmR7c2VlYWxzb30KIAogCitcc3Vic2VjdGlvbntNb2R1bGUgQ29udGVudHN9CisKK1RoZSBcbW9kdWxle3NobGV4fSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworXGJlZ2lue2Z1bmNkZXNjfXtzcGxpdH17c1xvcHRpb25hbHssIHBvc2l4PVxjb2Rle1RydWV9XG9wdGlvbmFseywKKwkJCXNwYWNlcz1cY29kZXtUcnVlfX19fQorU3BsaXQgdGhlIHN0cmluZyBcdmFye3N9IHVzaW5nIHNoZWxsLWxpa2Ugc3ludGF4LiBJZiBcY29kZXtwb3NpeH0gaXMKK1xjb2Rle1RydWV9LCBvcGVyYXRlIGluIHBvc2l4IG1vZGUuIElmIFxjb2Rle3NwYWNlc30gaXMgXGNvZGV7VHJ1ZX0sIGl0Cit3aWxsIG9ubHkgc3BsaXQgd29yZHMgaW4gd2hpdGVzcGFjZXMgKHNldHRpbmcgdGhlCitcbWVtYmVye3doaXRlc3BhY2Vfc3BsaXR9IG1lbWJlciBvZiB0aGUgXGNsYXNze3NobGV4fSBpbnN0YW5jZSkuCitcdmVyc2lvbmFkZGVkezIuM30KK1xlbmR7ZnVuY2Rlc2N9CisKK1RoZSBcbW9kdWxle3NobGV4fSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNsYXNzZXM6CisKK1xiZWdpbntjbGFzc2Rlc2N9e3NobGV4fXtcb3B0aW9uYWx7aW5zdHJlYW09XGNvZGV7c3lzLnN0ZGlufVxvcHRpb25hbHssCisJCQkgaW5maWxlPVxjb2Rle05vbmV9XG9wdGlvbmFseywKKwkJCSBwb3NpeD1cY29kZXtGYWxzZX19fX19CitBIFxjbGFzc3tzaGxleH0gaW5zdGFuY2Ugb3Igc3ViY2xhc3MgaW5zdGFuY2UgaXMgYSBsZXhpY2FsIGFuYWx5emVyCitvYmplY3QuICBUaGUgaW5pdGlhbGl6YXRpb24gYXJndW1lbnQsIGlmIHByZXNlbnQsIHNwZWNpZmllcyB3aGVyZSB0bworcmVhZCBjaGFyYWN0ZXJzIGZyb20uIEl0IG11c3QgYmUgYSBmaWxlLS9zdHJlYW0tbGlrZSBvYmplY3Qgd2l0aAorXG1ldGhvZHtyZWFkKCl9IGFuZCBcbWV0aG9ke3JlYWRsaW5lKCl9IG1ldGhvZHMsIG9yIGEgc3RyaW5nIChzdHJpbmdzCithcmUgYWNjZXB0ZWQgc2luY2UgUHl0aG9uIDIuMykuIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBpbnB1dCB3aWxsIGJlCit0YWtlbiBmcm9tIFxjb2Rle3N5cy5zdGRpbn0uICBUaGUgc2Vjb25kIG9wdGlvbmFsIGFyZ3VtZW50IGlzIGEgZmlsZW5hbWUKK3N0cmluZywgd2hpY2ggc2V0cyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgXG1lbWJlcntpbmZpbGV9IG1lbWJlci4gIElmCit0aGUgXHZhcntpbnN0cmVhbX0gYXJndW1lbnQgaXMgb21pdHRlZCBvciBlcXVhbCB0byBcY29kZXtzeXMuc3RkaW59LAordGhpcyBzZWNvbmQgYXJndW1lbnQgZGVmYXVsdHMgdG8gYGBzdGRpbicnLiAgVGhlIFx2YXJ7cG9zaXh9IGFyZ3VtZW50Cit3YXMgaW50cm9kdWNlZCBpbiBQeXRob24gMi4zLCBhbmQgZGVmaW5lcyB0aGUgb3BlcmF0aW9uYWwgbW9kZS4gV2hlbgorXHZhcntwb3NpeH0gaXMgbm90IHRydWUgKGRlZmF1bHQpLCB0aGUgXGNsYXNze3NobGV4fSBpbnN0YW5jZSB3aWxsCitvcGVyYXRlIGluIGNvbXBhdGliaWxpdHkgbW9kZS4gV2hlbiBvcGVyYXRpbmcgaW4gcG9zaXggbW9kZSwKK1xjbGFzc3tzaGxleH0gd2lsbCB0cnkgdG8gYmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIHBvc2l4IHNoZWxsCitwYXJzaW5nIHJ1bGVzLiBTZWV+XHJlZntzaGxleC1vYmplY3RzfS4KK1xlbmR7Y2xhc3NkZXNjfQorCiBcc3Vic2VjdGlvbntzaGxleCBPYmplY3RzIFxsYWJlbHtzaGxleC1vYmplY3RzfX0KIAogQSBcY2xhc3N7c2hsZXh9IGluc3RhbmNlIGhhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKLQogXGJlZ2lue21ldGhvZGRlc2N9e2dldF90b2tlbn17fQogUmV0dXJuIGEgdG9rZW4uICBJZiB0b2tlbnMgaGF2ZSBiZWVuIHN0YWNrZWQgdXNpbmcKIFxtZXRob2R7cHVzaF90b2tlbigpfSwgcG9wIGEgdG9rZW4gb2ZmIHRoZSBzdGFjay4gIE90aGVyd2lzZSwgcmVhZCBvbmUKIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gIElmIHJlYWRpbmcgZW5jb3VudGVycyBhbiBpbW1lZGlhdGUKLWVuZC1vZi1maWxlLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuIAorZW5kLW9mLWZpbGUsIFxtZW1iZXJ7c2VsZi5lb2Z9IGlzIHJldHVybmVkICh0aGUgZW1wdHkgc3RyaW5nIChcY29kZXsiIn0pCitpbiBub24tcG9zaXggbW9kZSwgYW5kIFxjb2Rle05vbmV9IGluIHBvc2l4IG1vZGUpLgogXGVuZHttZXRob2RkZXNjfQogCiBcYmVnaW57bWV0aG9kZGVzY317cHVzaF90b2tlbn17c3RyfQpAQCAtMTMyLDYgKzE1NiwxMiBAQAogY2FycmlhZ2UtcmV0dXJuLgogXGVuZHttZW1iZXJkZXNjfQogCitcYmVnaW57bWVtYmVyZGVzY317ZXNjYXBlfQorQ2hhcmFjdGVycyB0aGF0IHdpbGwgYmUgY29uc2lkZXJlZCBhcyBlc2NhcGUuIFRoaXMgd2lsbCBiZSBvbmx5IHVzZWQKK2luIHBvc2l4IG1vZGUsIGFuZCBpbmNsdWRlcyBqdXN0IFxjaGFyYWN0ZXJ7XHRleHRiYWNrc2xhc2h9IGJ5IGRlZmF1bHQuCitcdmVyc2lvbmFkZGVkezIuM30KK1xlbmR7bWVtYmVyZGVzY30KKwogXGJlZ2lue21lbWJlcmRlc2N9e3F1b3Rlc30KIENoYXJhY3RlcnMgdGhhdCB3aWxsIGJlIGNvbnNpZGVyZWQgc3RyaW5nIHF1b3Rlcy4gIFRoZSB0b2tlbgogYWNjdW11bGF0ZXMgdW50aWwgdGhlIHNhbWUgcXVvdGUgaXMgZW5jb3VudGVyZWQgYWdhaW4gKHRodXMsIGRpZmZlcmVudApAQCAtMTM5LDYgKzE2OSwyMCBAQAogXEFTQ0lJe30gc2luZ2xlIGFuZCBkb3VibGUgcXVvdGVzLgogXGVuZHttZW1iZXJkZXNjfQogCitcYmVnaW57bWVtYmVyZGVzY317ZXNjYXBlZHF1b3Rlc30KK0NoYXJhY3RlcnMgaW4gXG1lbWJlcntxdW90ZXN9IHRoYXQgd2lsbCBpbnRlcnByZXQgZXNjYXBlIGNoYXJhY3RlcnMKK2RlZmluZWQgaW4gXG1lbWJlcntlc2NhcGV9LiBUaGlzIGlzIG9ubHkgdXNlZCBpbiBwb3NpeCBtb2RlLCBhbmQgaW5jbHVkZXMKK2p1c3QgXGNoYXJhY3RlcnsifSBieSBkZWZhdWx0LgorXHZlcnNpb25hZGRlZHsyLjN9CitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZW1iZXJkZXNjfXt3aGl0ZXNwYWNlX3NwbGl0fQorSWYgdHJ1ZSwgdG9rZW5zIHdpbGwgb25seSBiZSBzcGxpdCBpbiB3aGl0ZXNwYWNlcy4gVGhpcyBpcyB1c2VmdWwsIGZvcgorZXhhbXBsZSwgZm9yIHBhcnNpbmcgY29tbWFuZCBsaW5lcyB3aXRoIFxjbGFzc3tzaGxleH0sIGdldHRpbmcgdG9rZW5zCitpbiBhIHNpbWlsYXIgd2F5IHRvIHNoZWxsIGFyZ3VtZW50cy4KK1x2ZXJzaW9uYWRkZWR7Mi4zfQorXGVuZHttZW1iZXJkZXNjfQorCiBcYmVnaW57bWVtYmVyZGVzY317aW5maWxlfQogVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgaW5wdXQgZmlsZSwgYXMgaW5pdGlhbGx5IHNldCBhdCBjbGFzcwogaW5zdGFudGlhdGlvbiB0aW1lIG9yIHN0YWNrZWQgYnkgbGF0ZXIgc291cmNlIHJlcXVlc3RzLiAgSXQgbWF5CkBAIC0xNjgsMTMgKzIxMiw2IEBACiBkZXRhaWxzLgogXGVuZHttZW1iZXJkZXNjfQogCi1Ob3RlIHRoYXQgYW55IGNoYXJhY3RlciBub3QgZGVjbGFyZWQgdG8gYmUgYSB3b3JkIGNoYXJhY3RlciwKLXdoaXRlc3BhY2UsIG9yIGEgcXVvdGUgd2lsbCBiZSByZXR1cm5lZCBhcyBhIHNpbmdsZS1jaGFyYWN0ZXIgdG9rZW4uCi0KLVF1b3RlIGFuZCBjb21tZW50IGNoYXJhY3RlcnMgYXJlIG5vdCByZWNvZ25pemVkIHdpdGhpbiB3b3Jkcy4gIFRodXMsCi10aGUgYmFyZSB3b3JkcyBcc2FtcHthaW4ndH0gYW5kIFxzYW1we2FpblwjdH0gd291bGQgYmUgcmV0dXJuZWQgYXMgc2luZ2xlCi10b2tlbnMgYnkgdGhlIGRlZmF1bHQgcGFyc2VyLgotCiBcYmVnaW57bWVtYmVyZGVzY317bGluZW5vfQogU291cmNlIGxpbmUgbnVtYmVyIChjb3VudCBvZiBuZXdsaW5lcyBzZWVuIHNvIGZhciBwbHVzIG9uZSkuCiBcZW5ke21lbWJlcmRlc2N9CkBAIC0xODMsMyArMjIwLDU2IEBACiBUaGUgdG9rZW4gYnVmZmVyLiAgSXQgbWF5IGJlIHVzZWZ1bCB0byBleGFtaW5lIHRoaXMgd2hlbiBjYXRjaGluZwogZXhjZXB0aW9ucy4KIFxlbmR7bWVtYmVyZGVzY30KKworXGJlZ2lue21lbWJlcmRlc2N9e2VvZn0KK1Rva2VuIHVzZWQgdG8gZGV0ZXJtaW5lIGVuZCBvZiBmaWxlLiBUaGlzIHdpbGwgYmUgc2V0IHRvIHRoZSBlbXB0eQorc3RyaW5nIChcY29kZXsiIn0pLCBpbiBub24tcG9zaXggbW9kZSwgYW5kIHRvIFxjb2Rle05vbmV9IGluIHBvc2l4Cittb2RlLgorXHZlcnNpb25hZGRlZHsyLjN9CitcZW5ke21lbWJlcmRlc2N9CisKK1xzdWJzZWN0aW9ue1BhcnNpbmcgUnVsZXNcbGFiZWx7c2hsZXgtcGFyc2luZy1ydWxlc319CisKK1doZW4gb3BlcmF0aW5nIGluIG5vbi1wb3NpeCBtb2RlLCBcY2xhc3N7c2hsZXh9IHdpdGggdHJ5IHRvIG9iZXkgdG8gdGhlCitmb2xsb3dpbmcgcnVsZXMuCisKK1xiZWdpbntpdGVtaXplfQorXGl0ZW0gUXVvdGUgY2hhcmFjdGVycyBhcmUgbm90IHJlY29nbml6ZWQgd2l0aGluIHdvcmRzCisgICAgICAoXGNvZGV7RG8iTm90IlNlcGFyYXRlfSBpcyBwYXJzZWQgYXMgdGhlIHNpbmdsZSB3b3JkCisgICAgICBcY29kZXtEbyJOb3QiU2VwYXJhdGV9KTsKK1xpdGVtIEVzY2FwZSBjaGFyYWN0ZXJzIGFyZSBub3QgcmVjb2duaXplZDsKK1xpdGVtIEVuY2xvc2luZyBjaGFyYWN0ZXJzIGluIHF1b3RlcyBwcmVzZXJ2ZSB0aGUgbGl0ZXJhbCB2YWx1ZSBvZgorICAgICAgYWxsIGNoYXJhY3RlcnMgd2l0aGluIHRoZSBxdW90ZXM7CitcaXRlbSBDbG9zaW5nIHF1b3RlcyBzZXBhcmF0ZSB3b3JkcyAoXGNvZGV7IkRvIlNlcGFyYXRlfSBpcyBwYXJzZWQKKyAgICAgIGFzIFxjb2RleyJEbyJ9IGFuZCBcY29kZXtTZXBhcmF0ZX0pOworXGl0ZW0gSWYgXG1lbWJlcnt3aGl0ZXNwYWNlX3NwbGl0fSBpcyBcY29kZXtGYWxzZX0sIGFueSBjaGFyYWN0ZXIgbm90CisgICAgICBkZWNsYXJlZCB0byBiZSBhIHdvcmQgY2hhcmFjdGVyLCB3aGl0ZXNwYWNlLCBvciBhIHF1b3RlIHdpbGwgYmUKKyAgICAgIHJldHVybmVkIGFzIGEgc2luZ2xlLWNoYXJhY3RlciB0b2tlbi4gSWYgaXQgaXMgXGNvZGV7VHJ1ZX0sCisgICAgICBcY2xhc3N7c2hsZXh9IHdpbGwgb25seSBzcGxpdCB3b3JkcyBpbiB3aGl0ZXNwYWNlczsKK1xpdGVtIEVPRiBpcyBzaWduYWxlZCB3aXRoIGFuIGVtcHR5IHN0cmluZyAoXGNvZGV7IiJ9KTsKK1xpdGVtIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHBhcnNlIGVtcHR5IHN0cmluZ3MsIGV2ZW4gaWYgcXVvdGVkLgorXGVuZHtpdGVtaXplfQorCitXaGVuIG9wZXJhdGluZyBpbiBwb3NpeCBtb2RlLCBcY2xhc3N7c2hsZXh9IHdpbGwgdHJ5IHRvIG9iZXkgdG8gdGhlCitmb2xsb3dpbmcgcGFyc2luZyBydWxlcy4KKworXGJlZ2lue2l0ZW1pemV9CitcaXRlbSBRdW90ZXMgYXJlIHN0cmlwcGVkIG91dCwgYW5kIGRvIG5vdCBzZXBhcmF0ZSB3b3JkcworICAgICAgKFxjb2RleyJEbyJOb3QiU2VwYXJhdGUifSBpcyBwYXJzZWQgYXMgdGhlIHNpbmdsZSB3b3JkCisgICAgICBcY29kZXtEb05vdFNlcGFyYXRlfSk7CitcaXRlbSBOb24tcXVvdGVkIGVzY2FwZSBjaGFyYWN0ZXJzIChlLmcuIFxjaGFyYWN0ZXJ7XHRleHRiYWNrc2xhc2h9KQorICAgICAgcHJlc2VydmUgdGhlIGxpdGVyYWwgdmFsdWUgb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRoYXQgZm9sbG93czsKK1xpdGVtIEVuY2xvc2luZyBjaGFyYWN0ZXJzIGluIHF1b3RlcyB3aGljaCBhcmUgbm90IHBhcnQgb2YKKyAgICAgIFxtZW1iZXJ7ZXNjYXBlZHF1b3Rlc30gKGUuZy4gXGNoYXJhY3RlcnsnfSkgcHJlc2VydmUgdGhlIGxpdGVyYWwKKyAgICAgIHZhbHVlIG9mIGFsbCBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgcXVvdGVzOworXGl0ZW0gRW5jbG9zaW5nIGNoYXJhY3RlcnMgaW4gcXVvdGVzIHdoaWNoIGFyZSBwYXJ0IG9mCisgICAgICBcbWVtYmVye2VzY2FwZWRxdW90ZXN9IChlLmcuIFxjaGFyYWN0ZXJ7In0pIHByZXNlcnZlcyB0aGUgbGl0ZXJhbAorICAgICAgdmFsdWUgb2YgYWxsIGNoYXJhY3RlcnMgd2l0aGluIHRoZSBxdW90ZXMsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorICAgICAgdGhlIGNoYXJhY3RlcnMgbWVudGlvbmVkIGluIFxtZW1iZXJ7ZXNjYXBlfS4gVGhlIGVzY2FwZSBjaGFyYWN0ZXJzCisgICAgICByZXRhaW4gaXRzIHNwZWNpYWwgbWVhbmluZyBvbmx5IHdoZW4gZm9sbG93ZWQgYnkgdGhlIHF1b3RlIGluIHVzZSwKKyAgICAgIG9yIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGl0c2VsZi4gT3RoZXJ3aXNlIHRoZSBlc2NhcGUgY2hhcmFjdGVyCisgICAgICB3aWxsIGJlIGNvbnNpZGVyZWQgYSBub3JtYWwgY2hhcmFjdGVyLgorXGl0ZW0gRU9GIGlzIHNpZ25hbGVkIHdpdGggYSBcY29kZXtOb25lfSB2YWx1ZTsKK1xpdGVtIFF1b3RlZCBlbXB0eSBzdHJpbmdzIChcY29kZXsiIn0pIGFyZSBhbGxvd2VkOworXGVuZHtpdGVtaXplfQorCmRpZmYgLS1naXQgYS9MaWIvc2hsZXgucHkgYi9MaWIvc2hsZXgucHkKaW5kZXggN2ZmYTc5Yy4uODYzZTQwNCAxMDA2NDQKLS0tIGEvTGliL3NobGV4LnB5CisrKyBiL0xpYi9zaGxleC5weQpAQCAtMSwyOCArMSw1MSBAQAorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQogIiIiQSBsZXhpY2FsIGFuYWx5emVyIGNsYXNzIGZvciBzaW1wbGUgc2hlbGwtbGlrZSBzeW50YXhlcy4iIiIKIAogIyBNb2R1bGUgYW5kIGRvY3VtZW50YXRpb24gYnkgRXJpYyBTLiBSYXltb25kLCAyMSBEZWMgMTk5OAogIyBJbnB1dCBzdGFja2luZyBhbmQgZXJyb3IgbWVzc2FnZSBjbGVhbnVwIGFkZGVkIGJ5IEVTUiwgTWFyY2ggMjAwMAogIyBwdXNoX3NvdXJjZSgpIGFuZCBwb3Bfc291cmNlKCkgbWFkZSBleHBsaWNpdCBieSBFU1IsIEphbnVhcnkgMjAwMS4KKyMgUG9zaXggY29tcGxpYW5jZSwgc3BsaXQoKSwgc3RyaW5nIGFyZ3VtZW50cywgYW5kCisjIGl0ZXJhdG9yIGludGVyZmFjZSBieSBHdXN0YXZvIE5pZW1leWVyLCBBcHJpbCAyMDAzLgogCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cwogCi1fX2FsbF9fID0gWyJzaGxleCJdCitmcm9tIHR5cGVzIGltcG9ydCBTdHJpbmdUeXBlcworCit0cnk6CisgICAgZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworX19hbGxfXyA9IFsic2hsZXgiLCAic3BsaXQiXQogCiBjbGFzcyBzaGxleDoKICAgICAiQSBsZXhpY2FsIGFuYWx5emVyIGNsYXNzIGZvciBzaW1wbGUgc2hlbGwtbGlrZSBzeW50YXhlcy4iCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGluc3RyZWFtPU5vbmUsIGluZmlsZT1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5zdHJlYW09Tm9uZSwgaW5maWxlPU5vbmUsIHBvc2l4PTApOgorICAgICAgICBpZiB0eXBlKGluc3RyZWFtKSBpbiBTdHJpbmdUeXBlczoKKyAgICAgICAgICAgIGluc3RyZWFtID0gU3RyaW5nSU8oaW5zdHJlYW0pCiAgICAgICAgIGlmIGluc3RyZWFtIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5pbnN0cmVhbSA9IGluc3RyZWFtCiAgICAgICAgICAgICBzZWxmLmluZmlsZSA9IGluZmlsZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5pbnN0cmVhbSA9IHN5cy5zdGRpbgogICAgICAgICAgICAgc2VsZi5pbmZpbGUgPSBOb25lCisgICAgICAgIHNlbGYucG9zaXggPSBwb3NpeAorICAgICAgICBpZiBwb3NpeDoKKyAgICAgICAgICAgIHNlbGYuZW9mID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5lb2YgPSAnJwogICAgICAgICBzZWxmLmNvbW1lbnRlcnMgPSAnIycKICAgICAgICAgc2VsZi53b3JkY2hhcnMgPSAoJ2FiY2RmZWdoaWprbG1ub3BxcnN0dXZ3eHl6JwogICAgICAgICAgICAgICAgICAgICAgICAgICAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5XycpCisgICAgICAgIGlmIHNlbGYucG9zaXg6CisgICAgICAgICAgICBzZWxmLndvcmRjaGFycyArPSAoJ9/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vj5+vv8/f7/JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICfAwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d4nKQogICAgICAgICBzZWxmLndoaXRlc3BhY2UgPSAnIFx0XHJcbicKKyAgICAgICAgc2VsZi53aGl0ZXNwYWNlX3NwbGl0ID0gMAogICAgICAgICBzZWxmLnF1b3RlcyA9ICdcJyInCisgICAgICAgIHNlbGYuZXNjYXBlID0gJ1xcJworICAgICAgICBzZWxmLmVzY2FwZWRxdW90ZXMgPSAnIicKICAgICAgICAgc2VsZi5zdGF0ZSA9ICcgJwogICAgICAgICBzZWxmLnB1c2hiYWNrID0gW10KICAgICAgICAgc2VsZi5saW5lbm8gPSAxCkBAIC00Miw2ICs2NSw4IEBACiAKICAgICBkZWYgcHVzaF9zb3VyY2Uoc2VsZiwgbmV3c3RyZWFtLCBuZXdmaWxlPU5vbmUpOgogICAgICAgICAiUHVzaCBhbiBpbnB1dCBzb3VyY2Ugb250byB0aGUgbGV4ZXIncyBpbnB1dCBzb3VyY2Ugc3RhY2suIgorICAgICAgICBpZiB0eXBlKG5ld3N0cmVhbSkgaW4gU3RyaW5nVHlwZXM6CisgICAgICAgICAgICBuZXdzdHJlYW0gPSBTdHJpbmdJTyhuZXdzdHJlYW0pCiAgICAgICAgIHNlbGYuZmlsZXN0YWNrLmluc2VydCgwLCAoc2VsZi5pbmZpbGUsIHNlbGYuaW5zdHJlYW0sIHNlbGYubGluZW5vKSkKICAgICAgICAgc2VsZi5pbmZpbGUgPSBuZXdmaWxlCiAgICAgICAgIHNlbGYuaW5zdHJlYW0gPSBuZXdzdHJlYW0KQEAgLTczLDI5ICs5OCwzMSBAQAogICAgICAgICAjIE5vIHB1c2hiYWNrLiAgR2V0IGEgdG9rZW4uCiAgICAgICAgIHJhdyA9IHNlbGYucmVhZF90b2tlbigpCiAgICAgICAgICMgSGFuZGxlIGluY2x1c2lvbnMKLSAgICAgICAgd2hpbGUgcmF3ID09IHNlbGYuc291cmNlOgotICAgICAgICAgICAgc3BlYyA9IHNlbGYuc291cmNlaG9vayhzZWxmLnJlYWRfdG9rZW4oKSkKLSAgICAgICAgICAgIGlmIHNwZWM6Ci0gICAgICAgICAgICAgICAgKG5ld2ZpbGUsIG5ld3N0cmVhbSkgPSBzcGVjCi0gICAgICAgICAgICAgICAgc2VsZi5wdXNoX3NvdXJjZShuZXdzdHJlYW0sIG5ld2ZpbGUpCi0gICAgICAgICAgICByYXcgPSBzZWxmLmdldF90b2tlbigpCisgICAgICAgIGlmIHNlbGYuc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2hpbGUgcmF3ID09IHNlbGYuc291cmNlOgorICAgICAgICAgICAgICAgIHNwZWMgPSBzZWxmLnNvdXJjZWhvb2soc2VsZi5yZWFkX3Rva2VuKCkpCisgICAgICAgICAgICAgICAgaWYgc3BlYzoKKyAgICAgICAgICAgICAgICAgICAgKG5ld2ZpbGUsIG5ld3N0cmVhbSkgPSBzcGVjCisgICAgICAgICAgICAgICAgICAgIHNlbGYucHVzaF9zb3VyY2UobmV3c3RyZWFtLCBuZXdmaWxlKQorICAgICAgICAgICAgICAgIHJhdyA9IHNlbGYuZ2V0X3Rva2VuKCkKICAgICAgICAgIyBNYXliZSB3ZSBnb3QgRU9GIGluc3RlYWQ/Ci0gICAgICAgIHdoaWxlIHJhdyA9PSAiIjoKKyAgICAgICAgd2hpbGUgcmF3ID09IHNlbGYuZW9mOgogICAgICAgICAgICAgaWYgbGVuKHNlbGYuZmlsZXN0YWNrKSA9PSAwOgotICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmVvZgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLnBvcF9zb3VyY2UoKQogICAgICAgICAgICAgICAgIHJhdyA9IHNlbGYuZ2V0X3Rva2VuKCkKLSAgICAgICAgICMgTmVpdGhlciBpbmNsdXNpb24gbm9yIEVPRgorICAgICAgICAjIE5laXRoZXIgaW5jbHVzaW9uIG5vciBFT0YKICAgICAgICAgaWYgc2VsZi5kZWJ1ZyA+PSAxOgotICAgICAgICAgICAgaWYgcmF3OgorICAgICAgICAgICAgaWYgcmF3ICE9IHNlbGYuZW9mOgogICAgICAgICAgICAgICAgIHByaW50ICJzaGxleDogdG9rZW49IiArIGByYXdgCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHByaW50ICJzaGxleDogdG9rZW49RU9GIgogICAgICAgICByZXR1cm4gcmF3CiAKICAgICBkZWYgcmVhZF90b2tlbihzZWxmKToKLSAgICAgICAgIlJlYWQgYSB0b2tlbiBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gKG5vIHB1c2hiYWNrIG9yIGluY2x1c2lvbnMpIgorICAgICAgICBxdW90ZWQgPSAwCisgICAgICAgIGVzY2FwZWRzdGF0ZSA9ICcgJwogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgbmV4dGNoYXIgPSBzZWxmLmluc3RyZWFtLnJlYWQoMSkKICAgICAgICAgICAgIGlmIG5leHRjaGFyID09ICdcbic6CkBAIC0xMTMsMzUgKzE0MCw2NSBAQAogICAgICAgICAgICAgICAgIGVsaWYgbmV4dGNoYXIgaW4gc2VsZi53aGl0ZXNwYWNlOgogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnID49IDI6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAic2hsZXg6IEkgc2VlIHdoaXRlc3BhY2UgaW4gd2hpdGVzcGFjZSBzdGF0ZSIKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi50b2tlbjoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi50b2tlbiBvciAoc2VsZi5wb3NpeCBhbmQgcXVvdGVkKToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICAgIyBlbWl0IGN1cnJlbnQgdG9rZW4KICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgZWxpZiBuZXh0Y2hhciBpbiBzZWxmLmNvbW1lbnRlcnM6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5zdHJlYW0ucmVhZGxpbmUoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubyA9IHNlbGYubGluZW5vICsgMQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5wb3NpeCBhbmQgbmV4dGNoYXIgaW4gc2VsZi5lc2NhcGU6CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZWRzdGF0ZSA9ICdhJworICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gbmV4dGNoYXIKICAgICAgICAgICAgICAgICBlbGlmIG5leHRjaGFyIGluIHNlbGYud29yZGNoYXJzOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnRva2VuID0gbmV4dGNoYXIKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9ICdhJwogICAgICAgICAgICAgICAgIGVsaWYgbmV4dGNoYXIgaW4gc2VsZi5xdW90ZXM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYudG9rZW4gPSBuZXh0Y2hhcgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5wb3NpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9rZW4gPSBuZXh0Y2hhcgogICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gbmV4dGNoYXIKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYud2hpdGVzcGFjZV9zcGxpdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50b2tlbiA9IG5leHRjaGFyCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSAnYScKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnRva2VuID0gbmV4dGNoYXIKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi50b2tlbjoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi50b2tlbiBvciAoc2VsZi5wb3NpeCBhbmQgcXVvdGVkKToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICAgIyBlbWl0IGN1cnJlbnQgdG9rZW4KICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbGlmIHNlbGYuc3RhdGUgaW4gc2VsZi5xdW90ZXM6Ci0gICAgICAgICAgICAgICAgc2VsZi50b2tlbiA9IHNlbGYudG9rZW4gKyBuZXh0Y2hhcgotICAgICAgICAgICAgICAgIGlmIG5leHRjaGFyID09IHNlbGYuc3RhdGU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSAnICcKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbGlmIG5vdCBuZXh0Y2hhcjogICAgICAjIGVuZCBvZiBmaWxlCisgICAgICAgICAgICAgICAgcXVvdGVkID0gMQorICAgICAgICAgICAgICAgIGlmIG5vdCBuZXh0Y2hhcjogICAgICAjIGVuZCBvZiBmaWxlCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWcgPj0gMjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJzaGxleDogSSBzZWUgRU9GIGluIHF1b3RlcyBzdGF0ZSIKICAgICAgICAgICAgICAgICAgICAgIyBYWFggd2hhdCBlcnJvciBzaG91bGQgYmUgcmFpc2VkIGhlcmU/CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJObyBjbG9zaW5nIHF1b3RhdGlvbiIKKyAgICAgICAgICAgICAgICBpZiBuZXh0Y2hhciA9PSBzZWxmLnN0YXRlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5wb3NpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9rZW4gPSBzZWxmLnRva2VuICsgbmV4dGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSAnICcKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gJ2EnCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnBvc2l4IGFuZCBuZXh0Y2hhciBpbiBzZWxmLmVzY2FwZSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSBpbiBzZWxmLmVzY2FwZWRxdW90ZXM6CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZWRzdGF0ZSA9IHNlbGYuc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IG5leHRjaGFyCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50b2tlbiA9IHNlbGYudG9rZW4gKyBuZXh0Y2hhcgorICAgICAgICAgICAgZWxpZiBzZWxmLnN0YXRlIGluIHNlbGYuZXNjYXBlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBuZXh0Y2hhcjogICAgICAjIGVuZCBvZiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWcgPj0gMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJzaGxleDogSSBzZWUgRU9GIGluIGVzY2FwZSBzdGF0ZSIKKyAgICAgICAgICAgICAgICAgICAgIyBYWFggd2hhdCBlcnJvciBzaG91bGQgYmUgcmFpc2VkIGhlcmU/CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJObyBlc2NhcGVkIGNoYXJhY3RlciIKKyAgICAgICAgICAgICAgICAjIEluIHBvc2l4IHNoZWxscywgb25seSB0aGUgcXVvdGUgaXRzZWxmIG9yIHRoZSBlc2NhcGUKKyAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBtYXkgYmUgZXNjYXBlZCB3aXRoaW4gcXVvdGVzLgorICAgICAgICAgICAgICAgIGlmIGVzY2FwZWRzdGF0ZSBpbiBzZWxmLnF1b3RlcyBhbmQgXAorICAgICAgICAgICAgICAgICAgIG5leHRjaGFyICE9IHNlbGYuc3RhdGUgYW5kIG5leHRjaGFyICE9IGVzY2FwZWRzdGF0ZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50b2tlbiA9IHNlbGYudG9rZW4gKyBzZWxmLnN0YXRlCisgICAgICAgICAgICAgICAgc2VsZi50b2tlbiA9IHNlbGYudG9rZW4gKyBuZXh0Y2hhcgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBlc2NhcGVkc3RhdGUKICAgICAgICAgICAgIGVsaWYgc2VsZi5zdGF0ZSA9PSAnYSc6CiAgICAgICAgICAgICAgICAgaWYgbm90IG5leHRjaGFyOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gTm9uZSAgICMgZW5kIG9mIGZpbGUKQEAgLTE1MCwxNCArMjA3LDI2IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWcgPj0gMjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJzaGxleDogSSBzZWUgd2hpdGVzcGFjZSBpbiB3b3JkIHN0YXRlIgogICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gJyAnCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudG9rZW46CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudG9rZW4gb3IgKHNlbGYucG9zaXggYW5kIHF1b3RlZCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayAgICMgZW1pdCBjdXJyZW50IHRva2VuCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGVsaWYgbmV4dGNoYXIgaW4gc2VsZi5jb21tZW50ZXJzOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmluc3RyZWFtLnJlYWRsaW5lKCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8gPSBzZWxmLmxpbmVubyArIDEKLSAgICAgICAgICAgICAgICBlbGlmIG5leHRjaGFyIGluIHNlbGYud29yZGNoYXJzIG9yIG5leHRjaGFyIGluIHNlbGYucXVvdGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnBvc2l4OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9ICcgJworICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi50b2tlbiBvciAoc2VsZi5wb3NpeCBhbmQgcXVvdGVkKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayAgICMgZW1pdCBjdXJyZW50IHRva2VuCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnBvc2l4IGFuZCBuZXh0Y2hhciBpbiBzZWxmLnF1b3RlczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IG5leHRjaGFyCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnBvc2l4IGFuZCBuZXh0Y2hhciBpbiBzZWxmLmVzY2FwZToKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZHN0YXRlID0gJ2EnCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBuZXh0Y2hhcgorICAgICAgICAgICAgICAgIGVsaWYgbmV4dGNoYXIgaW4gc2VsZi53b3JkY2hhcnMgb3IgbmV4dGNoYXIgaW4gc2VsZi5xdW90ZXMgXAorICAgICAgICAgICAgICAgICAgICBvciBzZWxmLndoaXRlc3BhY2Vfc3BsaXQ6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9rZW4gPSBzZWxmLnRva2VuICsgbmV4dGNoYXIKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnB1c2hiYWNrID0gW25leHRjaGFyXSArIHNlbGYucHVzaGJhY2sKQEAgLTE3MCw2ICsyMzksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgcmVzdWx0ID0gc2VsZi50b2tlbgogICAgICAgICBzZWxmLnRva2VuID0gJycKKyAgICAgICAgaWYgc2VsZi5wb3NpeCBhbmQgbm90IHF1b3RlZCBhbmQgcmVzdWx0ID09ICcnOgorICAgICAgICAgICAgcmVzdWx0ID0gTm9uZQogICAgICAgICBpZiBzZWxmLmRlYnVnID4gMToKICAgICAgICAgICAgIGlmIHJlc3VsdDoKICAgICAgICAgICAgICAgICBwcmludCAic2hsZXg6IHJhdyB0b2tlbj0iICsgYHJlc3VsdGAKQEAgLTE4Miw3ICsyNTMsNyBAQAogICAgICAgICBpZiBuZXdmaWxlWzBdID09ICciJzoKICAgICAgICAgICAgIG5ld2ZpbGUgPSBuZXdmaWxlWzE6LTFdCiAgICAgICAgICMgVGhpcyBpbXBsZW1lbnRzIGNwcC1saWtlIHNlbWFudGljcyBmb3IgcmVsYXRpdmUtcGF0aCBpbmNsdXNpb24uCi0gICAgICAgIGlmIHR5cGUoc2VsZi5pbmZpbGUpID09IHR5cGUoIiIpIGFuZCBub3Qgb3MucGF0aC5pc2FicyhuZXdmaWxlKToKKyAgICAgICAgaWYgdHlwZShzZWxmLmluZmlsZSkgaW4gU3RyaW5nVHlwZXMgYW5kIG5vdCBvcy5wYXRoLmlzYWJzKG5ld2ZpbGUpOgogICAgICAgICAgICAgbmV3ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc2VsZi5pbmZpbGUpLCBuZXdmaWxlKQogICAgICAgICByZXR1cm4gKG5ld2ZpbGUsIG9wZW4obmV3ZmlsZSwgInIiKSkKIApAQCAtMTk0LDYgKzI2NSwxOSBAQAogICAgICAgICAgICAgbGluZW5vID0gc2VsZi5saW5lbm8KICAgICAgICAgcmV0dXJuICJcIiVzXCIsIGxpbmUgJWQ6ICIgJSAoaW5maWxlLCBsaW5lbm8pCiAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgdG9rZW4gPSBzZWxmLmdldF90b2tlbigpCisgICAgICAgIGlmIHRva2VuID09IHNlbGYuZW9mOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICByZXR1cm4gdG9rZW4KKworZGVmIHNwbGl0KHMsIHBvc2l4PTEsIHNwYWNlcz0xKToKKyAgICBsZXggPSBzaGxleChzLCBwb3NpeD1wb3NpeCkKKyAgICBsZXgud2hpdGVzcGFjZV9zcGxpdCA9IHNwYWNlcworICAgIHJldHVybiBsaXN0KGxleCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NobGV4LnB5IGIvTGliL3Rlc3QvdGVzdF9zaGxleC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGVmODhjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zaGxleC5weQpAQCAtMCwwICsxLDE5MSBAQAorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MsIHN5cworaW1wb3J0IHNobGV4CisKK3RyeToKKyAgICBmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCisKKyMgVGhlIG9yaWdpbmFsIHRlc3QgZGF0YSBzZXQgd2FzIGZyb20gc2hlbGx3b3JkcywgYnkgSGFydG11dCBHb2ViZWwuCisKK2RhdGEgPSByIiIieHx4fAorZm9vIGJhcnxmb298YmFyfAorIGZvbyBiYXJ8Zm9vfGJhcnwKKyBmb28gYmFyIHxmb298YmFyfAorZm9vICAgYmFyICAgIGJsYSAgICAgZmFzZWx8Zm9vfGJhcnxibGF8ZmFzZWx8Cit4IHkgIHogICAgICAgICAgICAgIHh4eHh8eHx5fHp8eHh4eHwKK1x4IGJhcnxcfHh8YmFyfAorXCB4IGJhcnxcfHh8YmFyfAorXCBiYXJ8XHxiYXJ8Citmb28gXHggYmFyfGZvb3xcfHh8YmFyfAorZm9vIFwgeCBiYXJ8Zm9vfFx8eHxiYXJ8Citmb28gXCBiYXJ8Zm9vfFx8YmFyfAorZm9vICJiYXIiIGJsYXxmb298ImJhciJ8YmxhfAorImZvbyIgImJhciIgImJsYSJ8ImZvbyJ8ImJhciJ8ImJsYSJ8CisiZm9vIiBiYXIgImJsYSJ8ImZvbyJ8YmFyfCJibGEifAorImZvbyIgYmFyIGJsYXwiZm9vInxiYXJ8YmxhfAorZm9vICdiYXInIGJsYXxmb298J2Jhcid8YmxhfAorJ2ZvbycgJ2JhcicgJ2JsYSd8J2Zvbyd8J2Jhcid8J2JsYSd8CisnZm9vJyBiYXIgJ2JsYSd8J2Zvbyd8YmFyfCdibGEnfAorJ2ZvbycgYmFyIGJsYXwnZm9vJ3xiYXJ8YmxhfAorYmx1cmIgZm9vImJhciJiYXIiZmFzZWwiIGJhenxibHVyYnxmb28iYmFyImJhciJmYXNlbCJ8YmF6fAorYmx1cmIgZm9vJ2JhcidiYXInZmFzZWwnIGJhenxibHVyYnxmb28nYmFyJ2JhcidmYXNlbCd8YmF6fAorIiJ8IiJ8CisnJ3wnJ3wKK2ZvbyAiIiBiYXJ8Zm9vfCIifGJhcnwKK2ZvbyAnJyBiYXJ8Zm9vfCcnfGJhcnwKK2ZvbyAiIiAiIiAiIiBiYXJ8Zm9vfCIifCIifCIifGJhcnwKK2ZvbyAnJyAnJyAnJyBiYXJ8Zm9vfCcnfCcnfCcnfGJhcnwKK1wiInxcfCIifAorIlwifCJcInwKKyJmb29cIGJhciJ8ImZvb1wgYmFyInwKKyJmb29cXCBiYXIifCJmb29cXCBiYXIifAorImZvb1xcIGJhclwifCJmb29cXCBiYXJcInwKKyJmb29cXCIgYmFyXCIifCJmb29cXCJ8YmFyfFx8IiJ8CisiZm9vXFwgYmFyXCIgZGZhZGYifCJmb29cXCBiYXJcInxkZmFkZiJ8CisiZm9vXFxcIGJhclwiIGRmYWRmInwiZm9vXFxcIGJhclwifGRmYWRmInwKKyJmb29cXFx4IGJhclwiIGRmYWRmInwiZm9vXFxceCBiYXJcInxkZmFkZiJ8CisiZm9vXHggYmFyXCIgZGZhZGYifCJmb29ceCBiYXJcInxkZmFkZiJ8CitcJyd8XHwnJ3wKKydmb29cIGJhcid8J2Zvb1wgYmFyJ3wKKydmb29cXCBiYXInfCdmb29cXCBiYXInfAorImZvb1xcXHggYmFyXCIgZGYnYVwgJ2RmJ3wiZm9vXFxceCBiYXJcInxkZidhfFx8J2RmJ3wKK1wiZm9vInxcfCJmb28ifAorXCJmb28iXHh8XHwiZm9vInxcfHh8CisiZm9vXHgifCJmb29ceCJ8CisiZm9vXCAifCJmb29cICJ8Citmb29cIHh4fGZvb3xcfHh4fAorZm9vXCB4XHh8Zm9vfFx8eHxcfHh8Citmb29cIHhceFwiInxmb298XHx4fFx8eHxcfCIifAorImZvb1wgeFx4InwiZm9vXCB4XHgifAorImZvb1wgeFx4XFwifCJmb29cIHhceFxcInwKKyJmb29cIHhceFxcIiJmb29iYXIifCJmb29cIHhceFxcInwiZm9vYmFyInwKKyJmb29cIHhceFxcIlwnJyJmb29iYXIifCJmb29cIHhceFxcInxcfCcnfCJmb29iYXIifAorImZvb1wgeFx4XFwiXCciZm8nb2JhciJ8ImZvb1wgeFx4XFwifFx8JyJmbyd8b2JhciJ8CisiZm9vXCB4XHhcXCJcJyJmbydvYmFyIiAnZG9uJ1wnJ3QnfCJmb29cIHhceFxcInxcfCciZm8nfG9iYXIifCdkb24nfFx8Jyd8dCd8CisnZm9vXCBiYXInfCdmb29cIGJhcid8CisnZm9vXFwgYmFyJ3wnZm9vXFwgYmFyJ3wKK2Zvb1wgYmFyfGZvb3xcfGJhcnwKK2ZvbyNiYXJcbmJhenxmb29iYXp8Cis6LSkgOy0pfDp8LXwpfDt8LXwpfAor4ent8/p84XzpfO1883z6fAorIiIiCisKK3Bvc2l4X2RhdGEgPSByIiIieHx4fAorZm9vIGJhcnxmb298YmFyfAorIGZvbyBiYXJ8Zm9vfGJhcnwKKyBmb28gYmFyIHxmb298YmFyfAorZm9vICAgYmFyICAgIGJsYSAgICAgZmFzZWx8Zm9vfGJhcnxibGF8ZmFzZWx8Cit4IHkgIHogICAgICAgICAgICAgIHh4eHh8eHx5fHp8eHh4eHwKK1x4IGJhcnx4fGJhcnwKK1wgeCBiYXJ8IHh8YmFyfAorXCBiYXJ8IGJhcnwKK2ZvbyBceCBiYXJ8Zm9vfHh8YmFyfAorZm9vIFwgeCBiYXJ8Zm9vfCB4fGJhcnwKK2ZvbyBcIGJhcnxmb298IGJhcnwKK2ZvbyAiYmFyIiBibGF8Zm9vfGJhcnxibGF8CisiZm9vIiAiYmFyIiAiYmxhInxmb298YmFyfGJsYXwKKyJmb28iIGJhciAiYmxhInxmb298YmFyfGJsYXwKKyJmb28iIGJhciBibGF8Zm9vfGJhcnxibGF8Citmb28gJ2JhcicgYmxhfGZvb3xiYXJ8YmxhfAorJ2ZvbycgJ2JhcicgJ2JsYSd8Zm9vfGJhcnxibGF8CisnZm9vJyBiYXIgJ2JsYSd8Zm9vfGJhcnxibGF8CisnZm9vJyBiYXIgYmxhfGZvb3xiYXJ8YmxhfAorYmx1cmIgZm9vImJhciJiYXIiZmFzZWwiIGJhenxibHVyYnxmb29iYXJiYXJmYXNlbHxiYXp8CitibHVyYiBmb28nYmFyJ2JhcidmYXNlbCcgYmF6fGJsdXJifGZvb2JhcmJhcmZhc2VsfGJhenwKKyIifHwKKycnfHwKK2ZvbyAiIiBiYXJ8Zm9vfHxiYXJ8Citmb28gJycgYmFyfGZvb3x8YmFyfAorZm9vICIiICIiICIiIGJhcnxmb298fHx8YmFyfAorZm9vICcnICcnICcnIGJhcnxmb298fHx8YmFyfAorXCJ8InwKKyJcIiJ8InwKKyJmb29cIGJhciJ8Zm9vXCBiYXJ8CisiZm9vXFwgYmFyInxmb29cIGJhcnwKKyJmb29cXCBiYXJcIiJ8Zm9vXCBiYXIifAorImZvb1xcIiBiYXJcInxmb29cfGJhciJ8CisiZm9vXFwgYmFyXCIgZGZhZGYifGZvb1wgYmFyIiBkZmFkZnwKKyJmb29cXFwgYmFyXCIgZGZhZGYifGZvb1xcIGJhciIgZGZhZGZ8CisiZm9vXFxceCBiYXJcIiBkZmFkZiJ8Zm9vXFx4IGJhciIgZGZhZGZ8CisiZm9vXHggYmFyXCIgZGZhZGYifGZvb1x4IGJhciIgZGZhZGZ8CitcJ3wnfAorJ2Zvb1wgYmFyJ3xmb29cIGJhcnwKKydmb29cXCBiYXInfGZvb1xcIGJhcnwKKyJmb29cXFx4IGJhclwiIGRmJ2FcICdkZiJ8Zm9vXFx4IGJhciIgZGYnYVwgJ2RmfAorXCJmb298ImZvb3wKK1wiZm9vXHh8ImZvb3h8CisiZm9vXHgifGZvb1x4fAorImZvb1wgInxmb29cIHwKK2Zvb1wgeHh8Zm9vIHh4fAorZm9vXCB4XHh8Zm9vIHh4fAorZm9vXCB4XHhcInxmb28geHgifAorImZvb1wgeFx4Inxmb29cIHhceHwKKyJmb29cIHhceFxcInxmb29cIHhceFx8CisiZm9vXCB4XHhcXCIiZm9vYmFyInxmb29cIHhceFxmb29iYXJ8CisiZm9vXCB4XHhcXCJcJyJmb29iYXIifGZvb1wgeFx4XCdmb29iYXJ8CisiZm9vXCB4XHhcXCJcJyJmbydvYmFyInxmb29cIHhceFwnZm8nb2JhcnwKKyJmb29cIHhceFxcIlwnImZvJ29iYXIiICdkb24nXCcndCd8Zm9vXCB4XHhcJ2ZvJ29iYXJ8ZG9uJ3R8CisiZm9vXCB4XHhcXCJcJyJmbydvYmFyIiAnZG9uJ1wnJ3QnIFxcfGZvb1wgeFx4XCdmbydvYmFyfGRvbid0fFx8CisnZm9vXCBiYXInfGZvb1wgYmFyfAorJ2Zvb1xcIGJhcid8Zm9vXFwgYmFyfAorZm9vXCBiYXJ8Zm9vIGJhcnwKK2ZvbyNiYXJcbmJhenxmb298YmF6fAorOi0pIDstKXw6LSl8Oy0pfAor4ent8/p84ent8/p8CisiIiIKKworY2xhc3MgU2hsZXhUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZGF0YSA9IFt4LnNwbGl0KCJ8IilbOi0xXQorICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gZGF0YS5zcGxpdGxpbmVzKCldCisgICAgICAgIHNlbGYucG9zaXhfZGF0YSA9IFt4LnNwbGl0KCJ8IilbOi0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gcG9zaXhfZGF0YS5zcGxpdGxpbmVzKCldCisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuZGF0YToKKyAgICAgICAgICAgIGl0ZW1bMF0gPSBpdGVtWzBdLnJlcGxhY2UociJcbiIsICJcbiIpCisgICAgICAgIGZvciBpdGVtIGluIHNlbGYucG9zaXhfZGF0YToKKyAgICAgICAgICAgIGl0ZW1bMF0gPSBpdGVtWzBdLnJlcGxhY2UociJcbiIsICJcbiIpCisKKyAgICBkZWYgc3BsaXRUZXN0KHNlbGYsIGRhdGEsIHBvc2l4LCBzcGFjZXMpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZGF0YSkpOgorICAgICAgICAgICAgbCA9IHNobGV4LnNwbGl0KGRhdGFbaV1bMF0sIHBvc2l4PXBvc2l4LCBzcGFjZXM9c3BhY2VzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBkYXRhW2ldWzE6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YVtpXVswXSwgbCwgZGF0YVtpXVsxOl0pKQorCisgICAgZGVmIG9sZFNwbGl0KHNlbGYsIHMpOgorICAgICAgICByZXQgPSBbXQorICAgICAgICBsZXggPSBzaGxleC5zaGxleChTdHJpbmdJTyhzKSkKKyAgICAgICAgdG9rID0gbGV4LmdldF90b2tlbigpCisgICAgICAgIHdoaWxlIHRvazoKKyAgICAgICAgICAgIHJldC5hcHBlbmQodG9rKQorICAgICAgICAgICAgdG9rID0gbGV4LmdldF90b2tlbigpCisgICAgICAgIHJldHVybiByZXQKKyAgICAKKyAgICBkZWYgdGVzdFNwbGl0KHNlbGYpOgorICAgICAgICAiIiJUZXN0IGRhdGEgc3BsaXR0aW5nIHdpdGggbm9uLXBvc2l4IHBhcnNlciIiIgorICAgICAgICBzZWxmLnNwbGl0VGVzdChzZWxmLmRhdGEsIHBvc2l4PTAsIHNwYWNlcz0wKSAKKworICAgIGRlZiB0ZXN0U3BsaXRQb3NpeChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBkYXRhIHNwbGl0dGluZyB3aXRoIHBvc2l4IHBhcnNlciIiIgorICAgICAgICBzZWxmLnNwbGl0VGVzdChzZWxmLnBvc2l4X2RhdGEsIHBvc2l4PTEsIHNwYWNlcz0xKSAKKworICAgIGRlZiB0ZXN0Q29tcGF0KHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvbXBhdGliaWxpdHkgaW50ZXJmYWNlIiIiCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLmRhdGEpKToKKyAgICAgICAgICAgIGwgPSBzZWxmLm9sZFNwbGl0KHNlbGYuZGF0YVtpXVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgc2VsZi5kYXRhW2ldWzE6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5kYXRhW2ldWzBdLCBsLCBzZWxmLmRhdGFbaV1bMTpdKSkKKworIyBBbGxvdyB0aGlzIHRlc3QgdG8gYmUgdXNlZCB3aXRoIG9sZCBzaGxleC5weQoraWYgbm90IGdldGF0dHIoc2hsZXgsICJzcGxpdCIsIE5vbmUpOgorICAgIGZvciBtZXRobmFtZSBpbiBkaXIoU2hsZXhUZXN0KToKKyAgICAgICAgaWYgbWV0aG5hbWUuc3RhcnRzd2l0aCgidGVzdCIpIGFuZCBtZXRobmFtZSAhPSAidGVzdENvbXBhdCI6CisgICAgICAgICAgICBkZWxhdHRyKFNobGV4VGVzdCwgbWV0aG5hbWUpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9NaXNjL05FV1MgYi9NaXNjL05FV1MKaW5kZXggN2VmZWEzOS4uN2E0MGM1MiAxMDA2NDQKLS0tIGEvTWlzYy9ORVdTCisrKyBiL01pc2MvTkVXUwpAQCAtMTU1LDYgKzE1NSwxMCBAQAogCiAtIE5ldyBjc3YgcGFja2FnZSBtYWtlcyBpdCBlYXN5IHRvIHJlYWQvd3JpdGUgQ1NWIGZpbGVzLgogCistIE1vZHVsZSBzaGxleCBoYXMgYmVlbiBleHRlbmRlZCB0byBhbGxvdyBwb3NpeC1saWtlIHNoZWxsIHBhcnNpbmdzLAorICBpbmNsdWRpbmcgYSBzcGxpdCgpIGZ1bmN0aW9uIGZvciBlYXN5IHNwbGl0aW5nIG9mIHF1b3RlZCBzdHJpbmdzIGFuZAorICBjb21tYW5kcy4gQW4gaXRlcmF0b3IgaW50ZXJmYWNlIHdhcyBhbHNvIGltcGxlbWVudGVkLgorCiBUb29scy9EZW1vcwogLS0tLS0tLS0tLS0KIAo=