IyBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiMKIyBHZXJtYW4ga2V5Ym9hcmQgbGF5b3V0LCBRV0VSVFogc3R5bGUuCiMKCnR5cGUgT1ZFUkxBWQoKbWFwIGtleSAxMiBTTEFTSCAgICAgICAgICAgICMgpyA/IFwKbWFwIGtleSAyMSBaCm1hcCBrZXkgNDQgWQptYXAga2V5IDUzIE1JTlVTICAgICAgICAgICAgIyAtIF8KbWFwIGtleSA4NiBQTFVTICAgICAgICAgICAgICMgPCA+IHwKCiMjIyBST1cgMQoKa2V5IEdSQVZFIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ14nCiAgICBzaGlmdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHUwMGIwJwp9CgprZXkgMSB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMScKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxJwogICAgc2hpZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyEnCn0KCmtleSAyIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcyJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzInCiAgICBzaGlmdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIicKICAgIHJhbHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcdTAwYjInCn0KCmtleSAzIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICczJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzMnCiAgICBzaGlmdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHUwMGE3JwogICAgcmFsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x1MDBiMycKfQoKa2V5IDQgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzQnCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNCcKICAgIHNoaWZ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICckJwp9CgprZXkgNSB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNScKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1JwogICAgc2hpZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyUnCn0KCmtleSA2IHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc2JwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzYnCiAgICBzaGlmdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJicKfQoKa2V5IDcgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzcnCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNycKICAgIHNoaWZ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJwogICAgcmFsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3snCn0KCmtleSA4IHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc4JwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzgnCiAgICBzaGlmdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCcKICAgIHJhbHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbJwp9CgprZXkgOSB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOScKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc5JwogICAgc2hpZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyknCiAgICByYWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXScKfQoKa2V5IDAgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAnCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCcKICAgIHNoaWZ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc9JwogICAgcmFsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30nCn0KCmtleSBTTEFTSCB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHUwMGRmJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x1MDBkZicKICAgIHNoaWZ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc/JwogICAgcmFsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcJwp9CgprZXkgRVFVQUxTIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcdTAwYjQnCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHUwMzAxJwogICAgc2hpZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x1MDMwMCcKfQoKIyMjIFJPVyAyCgprZXkgUSB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUScKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxJwogICAgc2hpZnQsIGNhcHNsb2NrOiAgICAgICAgICAgICAgICAgICAgJ1EnCiAgICByYWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQCcKfQoKa2V5IFcgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1cnCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndycKICAgIHNoaWZ0LCBjYXBzbG9jazogICAgICAgICAgICAgICAgICAgICdXJwp9CgprZXkgRSB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRScKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlJwogICAgc2hpZnQsIGNhcHNsb2NrOiAgICAgICAgICAgICAgICAgICAgJ0UnCiAgICByYWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHUyMGFjJwp9CgprZXkgUiB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUicKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyJwogICAgc2hpZnQsIGNhcHNsb2NrOiAgICAgICAgICAgICAgICAgICAgJ1InCn0KCmtleSBUIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3QnCiAgICBzaGlmdCwgY2Fwc2xvY2s6ICAgICAgICAgICAgICAgICAgICAnVCcKfQoKa2V5IFogewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1onCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneicKICAgIHNoaWZ0LCBjYXBzbG9jazogICAgICAgICAgICAgICAgICAgICdaJwp9CgprZXkgVSB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVScKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1JwogICAgc2hpZnQsIGNhcHNsb2NrOiAgICAgICAgICAgICAgICAgICAgJ1UnCn0KCmtleSBJIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2knCiAgICBzaGlmdCwgY2Fwc2xvY2s6ICAgICAgICAgICAgICAgICAgICAnSScKfQoKa2V5IE8gewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ08nCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbycKICAgIHNoaWZ0LCBjYXBzbG9jazogICAgICAgICAgICAgICAgICAgICdPJwp9CgprZXkgUCB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUCcKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwJwogICAgc2hpZnQsIGNhcHNsb2NrOiAgICAgICAgICAgICAgICAgICAgJ1AnCn0KCmtleSBMRUZUX0JSQUNLRVQgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x1MDBkYycKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcdTAwZmMnCiAgICBzaGlmdCwgY2Fwc2xvY2s6ICAgICAgICAgICAgICAgICAgICAnXHUwMGRjJwp9CgprZXkgUklHSFRfQlJBQ0tFVCB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKycKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrJwogICAgc2hpZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyonCiAgICByYWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnficKfQoKIyMjIFJPVyAzCgprZXkgQSB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQScKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhJwogICAgc2hpZnQsIGNhcHNsb2NrOiAgICAgICAgICAgICAgICAgICAgJ0EnCn0KCmtleSBTIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3MnCiAgICBzaGlmdCwgY2Fwc2xvY2s6ICAgICAgICAgICAgICAgICAgICAnUycKfQoKa2V5IEQgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0QnCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZCcKICAgIHNoaWZ0LCBjYXBzbG9jazogICAgICAgICAgICAgICAgICAgICdEJwp9CgprZXkgRiB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRicKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmJwogICAgc2hpZnQsIGNhcHNsb2NrOiAgICAgICAgICAgICAgICAgICAgJ0YnCn0KCmtleSBHIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdHJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2cnCiAgICBzaGlmdCwgY2Fwc2xvY2s6ICAgICAgICAgICAgICAgICAgICAnRycKfQoKa2V5IEggewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0gnCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaCcKICAgIHNoaWZ0LCBjYXBzbG9jazogICAgICAgICAgICAgICAgICAgICdIJwp9CgprZXkgSiB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSicKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqJwogICAgc2hpZnQsIGNhcHNsb2NrOiAgICAgICAgICAgICAgICAgICAgJ0onCn0KCmtleSBLIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2snCiAgICBzaGlmdCwgY2Fwc2xvY2s6ICAgICAgICAgICAgICAgICAgICAnSycKfQoKa2V5IEwgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0wnCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbCcKICAgIHNoaWZ0LCBjYXBzbG9jazogICAgICAgICAgICAgICAgICAgICdMJwp9CgprZXkgU0VNSUNPTE9OIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcdTAwZDYnCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHUwMGY2JwogICAgc2hpZnQsIGNhcHNsb2NrOiAgICAgICAgICAgICAgICAgICAgJ1x1MDBkNicKfQoKa2V5IEFQT1NUUk9QSEUgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x1MDBjNCcKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcdTAwZTQnCiAgICBzaGlmdCwgY2Fwc2xvY2s6ICAgICAgICAgICAgICAgICAgICAnXHUwMGM0Jwp9CgprZXkgQkFDS1NMQVNIIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMnCiAgICBzaGlmdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCcnCn0KCiMjIyBST1cgNAoKa2V5IFBMVVMgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwnCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCcKICAgIHNoaWZ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc+JwogICAgcmFsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3wnCn0KCmtleSBZIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdZJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3knCiAgICBzaGlmdCwgY2Fwc2xvY2s6ICAgICAgICAgICAgICAgICAgICAnWScKfQoKa2V5IFggewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1gnCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneCcKICAgIHNoaWZ0LCBjYXBzbG9jazogICAgICAgICAgICAgICAgICAgICdYJwp9CgprZXkgQyB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQycKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjJwogICAgc2hpZnQsIGNhcHNsb2NrOiAgICAgICAgICAgICAgICAgICAgJ0MnCn0KCmtleSBWIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3YnCiAgICBzaGlmdCwgY2Fwc2xvY2s6ICAgICAgICAgICAgICAgICAgICAnVicKfQoKa2V5IEIgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0InCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYicKICAgIHNoaWZ0LCBjYXBzbG9jazogICAgICAgICAgICAgICAgICAgICdCJwp9CgprZXkgTiB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTicKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduJwogICAgc2hpZnQsIGNhcHNsb2NrOiAgICAgICAgICAgICAgICAgICAgJ04nCn0KCmtleSBNIHsKICAgIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNJwogICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ20nCiAgICBzaGlmdCwgY2Fwc2xvY2s6ICAgICAgICAgICAgICAgICAgICAnTScKICAgIHJhbHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcdTAwYjUnCn0KCmtleSBDT01NQSB7CiAgICBsYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLCcKICAgIGJhc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcsJwogICAgc2hpZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzsnCn0KCmtleSBQRVJJT0QgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4nCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLicKICAgIHNoaWZ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6Jwp9CgprZXkgTUlOVVMgewogICAgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0nCiAgICBiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLScKICAgIHNoaWZ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfJwp9Cg==