diff --git a/api/csharp/Chirpstack/api/Application.cs b/api/csharp/Chirpstack/api/Application.cs
index 7c6b27a7..be90e447 100644
--- a/api/csharp/Chirpstack/api/Application.cs
+++ b/api/csharp/Chirpstack/api/Application.cs
@@ -163,204 +163,205 @@ namespace Chirpstack.Api {
"bG90VGhpbmdzSW50ZWdyYXRpb24iVwojVXBkYXRlUGlsb3RUaGluZ3NJbnRl",
"Z3JhdGlvblJlcXVlc3QSMAoLaW50ZWdyYXRpb24YASABKAsyGy5hcGkuUGls",
"b3RUaGluZ3NJbnRlZ3JhdGlvbiI9CiNEZWxldGVQaWxvdFRoaW5nc0ludGVn",
- "cmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJOChBJZnR0",
+ "cmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJ8ChBJZnR0",
"dEludGVncmF0aW9uEhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJEgsKA2tleRgC",
- "IAEoCRIVCg11cGxpbmtfdmFsdWVzGAMgAygJIksKHUNyZWF0ZUlmdHR0SW50",
- "ZWdyYXRpb25SZXF1ZXN0EioKC2ludGVncmF0aW9uGAEgASgLMhUuYXBpLklm",
- "dHR0SW50ZWdyYXRpb24iNAoaR2V0SWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QS",
- "FgoOYXBwbGljYXRpb25faWQYASABKAkiSQobR2V0SWZ0dHRJbnRlZ3JhdGlv",
- "blJlc3BvbnNlEioKC2ludGVncmF0aW9uGAEgASgLMhUuYXBpLklmdHR0SW50",
- "ZWdyYXRpb24iSwodVXBkYXRlSWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QSKgoL",
- "aW50ZWdyYXRpb24YASABKAsyFS5hcGkuSWZ0dHRJbnRlZ3JhdGlvbiI3Ch1E",
- "ZWxldGVJZnR0dEludGVncmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9p",
- "ZBgBIAEoCSJJCi9HZW5lcmF0ZU1xdHRJbnRlZ3JhdGlvbkNsaWVudENlcnRp",
- "ZmljYXRlUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSKWAQowR2Vu",
- "ZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0aWZpY2F0ZVJlc3BvbnNl",
- "EhAKCHRsc19jZXJ0GAEgASgJEg8KB3Rsc19rZXkYAiABKAkSDwoHY2FfY2Vy",
- "dBgDIAEoCRIuCgpleHBpcmVzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVm",
- "LlRpbWVzdGFtcCoiCghFbmNvZGluZxIICgRKU09OEAASDAoIUFJPVE9CVUYQ",
- "ASq/AQoPSW50ZWdyYXRpb25LaW5kEggKBEhUVFAQABINCglJTkZMVVhfREIQ",
- "ARIQCgxUSElOR1NfQk9BUkQQAhIOCgpNWV9ERVZJQ0VTEAMSDgoKTE9SQV9D",
- "TE9VRBAEEg8KC0dDUF9QVUJfU1VCEAUSCwoHQVdTX1NOUxAGEhUKEUFaVVJF",
- "X1NFUlZJQ0VfQlVTEAcSEAoMUElMT1RfVEhJTkdTEAgSDwoLTVFUVF9HTE9C",
- "QUwQCRIJCgVJRlRUVBAKKj8KEUluZmx1eERiUHJlY2lzaW9uEgYKAk5TEAAS",
- "BQoBVRABEgYKAk1TEAISBQoBUxADEgUKAU0QBBIFCgFIEAUqMQoPSW5mbHV4",
- "RGJWZXJzaW9uEg4KCklORkxVWERCXzEQABIOCgpJTkZMVVhEQl8yEAEyuDwK",
- "EkFwcGxpY2F0aW9uU2VydmljZRJlCgZDcmVhdGUSHS5hcGkuQ3JlYXRlQXBw",
- "bGljYXRpb25SZXF1ZXN0Gh4uYXBpLkNyZWF0ZUFwcGxpY2F0aW9uUmVzcG9u",
- "c2UiHILT5JMCFiIRL2FwaS9hcHBsaWNhdGlvbnM6ASoSXgoDR2V0EhouYXBp",
- "LkdldEFwcGxpY2F0aW9uUmVxdWVzdBobLmFwaS5HZXRBcHBsaWNhdGlvblJl",
- "c3BvbnNlIh6C0+STAhgSFi9hcGkvYXBwbGljYXRpb25zL3tpZH0SbgoGVXBk",
- "YXRlEh0uYXBpLlVwZGF0ZUFwcGxpY2F0aW9uUmVxdWVzdBoWLmdvb2dsZS5w",
- "cm90b2J1Zi5FbXB0eSItgtPkkwInGiIvYXBpL2FwcGxpY2F0aW9ucy97YXBw",
- "bGljYXRpb24uaWR9OgEqEl8KBkRlbGV0ZRIdLmFwaS5EZWxldGVBcHBsaWNh",
- "dGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiHoLT5JMCGCoW",
- "L2FwaS9hcHBsaWNhdGlvbnMve2lkfRJeCgRMaXN0EhwuYXBpLkxpc3RBcHBs",
- "aWNhdGlvbnNSZXF1ZXN0Gh0uYXBpLkxpc3RBcHBsaWNhdGlvbnNSZXNwb25z",
- "ZSIZgtPkkwITEhEvYXBpL2FwcGxpY2F0aW9ucxKIAQoQTGlzdEludGVncmF0",
- "aW9ucxIcLmFwaS5MaXN0SW50ZWdyYXRpb25zUmVxdWVzdBodLmFwaS5MaXN0",
- "SW50ZWdyYXRpb25zUmVzcG9uc2UiN4LT5JMCMRIvL2FwaS9hcHBsaWNhdGlv",
- "bnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMSnwEKFUNyZWF0ZUh0",
- "dHBJbnRlZ3JhdGlvbhIhLmFwaS5DcmVhdGVIdHRwSW50ZWdyYXRpb25SZXF1",
- "ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkuC0+STAkUiQC9hcGkvYXBw",
+ "IAEoCRIVCg11cGxpbmtfdmFsdWVzGAMgAygJEhYKDmFyYml0cmFyeV9qc29u",
+ "GAQgASgIEhQKDGV2ZW50X3ByZWZpeBgFIAEoCSJLCh1DcmVhdGVJZnR0dElu",
+ "dGVncmF0aW9uUmVxdWVzdBIqCgtpbnRlZ3JhdGlvbhgBIAEoCzIVLmFwaS5J",
+ "ZnR0dEludGVncmF0aW9uIjQKGkdldElmdHR0SW50ZWdyYXRpb25SZXF1ZXN0",
+ "EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIkkKG0dldElmdHR0SW50ZWdyYXRp",
+ "b25SZXNwb25zZRIqCgtpbnRlZ3JhdGlvbhgBIAEoCzIVLmFwaS5JZnR0dElu",
+ "dGVncmF0aW9uIksKHVVwZGF0ZUlmdHR0SW50ZWdyYXRpb25SZXF1ZXN0EioK",
+ "C2ludGVncmF0aW9uGAEgASgLMhUuYXBpLklmdHR0SW50ZWdyYXRpb24iNwod",
+ "RGVsZXRlSWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25f",
+ "aWQYASABKAkiSQovR2VuZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0",
+ "aWZpY2F0ZVJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAkilgEKMEdl",
+ "bmVyYXRlTXF0dEludGVncmF0aW9uQ2xpZW50Q2VydGlmaWNhdGVSZXNwb25z",
+ "ZRIQCgh0bHNfY2VydBgBIAEoCRIPCgd0bHNfa2V5GAIgASgJEg8KB2NhX2Nl",
+ "cnQYAyABKAkSLgoKZXhwaXJlc19hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1",
+ "Zi5UaW1lc3RhbXAqIgoIRW5jb2RpbmcSCAoESlNPThAAEgwKCFBST1RPQlVG",
+ "EAEqvwEKD0ludGVncmF0aW9uS2luZBIICgRIVFRQEAASDQoJSU5GTFVYX0RC",
+ "EAESEAoMVEhJTkdTX0JPQVJEEAISDgoKTVlfREVWSUNFUxADEg4KCkxPUkFf",
+ "Q0xPVUQQBBIPCgtHQ1BfUFVCX1NVQhAFEgsKB0FXU19TTlMQBhIVChFBWlVS",
+ "RV9TRVJWSUNFX0JVUxAHEhAKDFBJTE9UX1RISU5HUxAIEg8KC01RVFRfR0xP",
+ "QkFMEAkSCQoFSUZUVFQQCio/ChFJbmZsdXhEYlByZWNpc2lvbhIGCgJOUxAA",
+ "EgUKAVUQARIGCgJNUxACEgUKAVMQAxIFCgFNEAQSBQoBSBAFKjEKD0luZmx1",
+ "eERiVmVyc2lvbhIOCgpJTkZMVVhEQl8xEAASDgoKSU5GTFVYREJfMhABMrg8",
+ "ChJBcHBsaWNhdGlvblNlcnZpY2USZQoGQ3JlYXRlEh0uYXBpLkNyZWF0ZUFw",
+ "cGxpY2F0aW9uUmVxdWVzdBoeLmFwaS5DcmVhdGVBcHBsaWNhdGlvblJlc3Bv",
+ "bnNlIhyC0+STAhYiES9hcGkvYXBwbGljYXRpb25zOgEqEl4KA0dldBIaLmFw",
+ "aS5HZXRBcHBsaWNhdGlvblJlcXVlc3QaGy5hcGkuR2V0QXBwbGljYXRpb25S",
+ "ZXNwb25zZSIegtPkkwIYEhYvYXBpL2FwcGxpY2F0aW9ucy97aWR9Em4KBlVw",
+ "ZGF0ZRIdLmFwaS5VcGRhdGVBcHBsaWNhdGlvblJlcXVlc3QaFi5nb29nbGUu",
+ "cHJvdG9idWYuRW1wdHkiLYLT5JMCJxoiL2FwaS9hcHBsaWNhdGlvbnMve2Fw",
+ "cGxpY2F0aW9uLmlkfToBKhJfCgZEZWxldGUSHS5hcGkuRGVsZXRlQXBwbGlj",
+ "YXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ih6C0+STAhgq",
+ "Fi9hcGkvYXBwbGljYXRpb25zL3tpZH0SXgoETGlzdBIcLmFwaS5MaXN0QXBw",
+ "bGljYXRpb25zUmVxdWVzdBodLmFwaS5MaXN0QXBwbGljYXRpb25zUmVzcG9u",
+ "c2UiGYLT5JMCExIRL2FwaS9hcHBsaWNhdGlvbnMSiAEKEExpc3RJbnRlZ3Jh",
+ "dGlvbnMSHC5hcGkuTGlzdEludGVncmF0aW9uc1JlcXVlc3QaHS5hcGkuTGlz",
+ "dEludGVncmF0aW9uc1Jlc3BvbnNlIjeC0+STAjESLy9hcGkvYXBwbGljYXRp",
+ "b25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zEp8BChVDcmVhdGVI",
+ "dHRwSW50ZWdyYXRpb24SIS5hcGkuQ3JlYXRlSHR0cEludGVncmF0aW9uUmVx",
+ "dWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJLgtPkkwJFIkAvYXBpL2Fw",
+ "cGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVn",
+ "cmF0aW9ucy9odHRwOgEqEpMBChJHZXRIdHRwSW50ZWdyYXRpb24SHi5hcGku",
+ "R2V0SHR0cEludGVncmF0aW9uUmVxdWVzdBofLmFwaS5HZXRIdHRwSW50ZWdy",
+ "YXRpb25SZXNwb25zZSI8gtPkkwI2EjQvYXBpL2FwcGxpY2F0aW9ucy97YXBw",
+ "bGljYXRpb25faWR9L2ludGVncmF0aW9ucy9odHRwEp8BChVVcGRhdGVIdHRw",
+ "SW50ZWdyYXRpb24SIS5hcGkuVXBkYXRlSHR0cEludGVncmF0aW9uUmVxdWVz",
+ "dBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJLgtPkkwJFGkAvYXBpL2FwcGxp",
+ "Y2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0",
+ "aW9ucy9odHRwOgEqEpABChVEZWxldGVIdHRwSW50ZWdyYXRpb24SIS5hcGku",
+ "RGVsZXRlSHR0cEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1",
+ "Zi5FbXB0eSI8gtPkkwI2KjQvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRp",
+ "b25faWR9L2ludGVncmF0aW9ucy9odHRwEqsBChlDcmVhdGVJbmZsdXhEYklu",
+ "dGVncmF0aW9uEiUuYXBpLkNyZWF0ZUluZmx1eERiSW50ZWdyYXRpb25SZXF1",
+ "ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ik+C0+STAkkiRC9hcGkvYXBw",
"bGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdy",
- "YXRpb25zL2h0dHA6ASoSkwEKEkdldEh0dHBJbnRlZ3JhdGlvbhIeLmFwaS5H",
- "ZXRIdHRwSW50ZWdyYXRpb25SZXF1ZXN0Gh8uYXBpLkdldEh0dHBJbnRlZ3Jh",
- "dGlvblJlc3BvbnNlIjyC0+STAjYSNC9hcGkvYXBwbGljYXRpb25zL3thcHBs",
- "aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2h0dHASnwEKFVVwZGF0ZUh0dHBJ",
- "bnRlZ3JhdGlvbhIhLmFwaS5VcGRhdGVIdHRwSW50ZWdyYXRpb25SZXF1ZXN0",
- "GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkuC0+STAkUaQC9hcGkvYXBwbGlj",
- "YXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRp",
- "b25zL2h0dHA6ASoSkAEKFURlbGV0ZUh0dHBJbnRlZ3JhdGlvbhIhLmFwaS5E",
- "ZWxldGVIdHRwSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVm",
- "LkVtcHR5IjyC0+STAjYqNC9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlv",
- "bl9pZH0vaW50ZWdyYXRpb25zL2h0dHASqwEKGUNyZWF0ZUluZmx1eERiSW50",
- "ZWdyYXRpb24SJS5hcGkuQ3JlYXRlSW5mbHV4RGJJbnRlZ3JhdGlvblJlcXVl",
- "c3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiT4LT5JMCSSJEL2FwaS9hcHBs",
- "aWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3Jh",
- "dGlvbnMvaW5mbHV4ZGI6ASoSowEKFkdldEluZmx1eERiSW50ZWdyYXRpb24S",
- "Ii5hcGkuR2V0SW5mbHV4RGJJbnRlZ3JhdGlvblJlcXVlc3QaIy5hcGkuR2V0",
- "SW5mbHV4RGJJbnRlZ3JhdGlvblJlc3BvbnNlIkCC0+STAjoSOC9hcGkvYXBw",
- "bGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2luZmx1",
- "eGRiEqsBChlVcGRhdGVJbmZsdXhEYkludGVncmF0aW9uEiUuYXBpLlVwZGF0",
- "ZUluZmx1eERiSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVm",
- "LkVtcHR5Ik+C0+STAkkaRC9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlv",
- "bi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2luZmx1eGRiOgEqEpwB",
- "ChlEZWxldGVJbmZsdXhEYkludGVncmF0aW9uEiUuYXBpLkRlbGV0ZUluZmx1",
- "eERiSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5",
- "IkCC0+STAjoqOC9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0v",
- "aW50ZWdyYXRpb25zL2luZmx1eGRiErQBChxDcmVhdGVUaGluZ3NCb2FyZElu",
- "dGVncmF0aW9uEiguYXBpLkNyZWF0ZVRoaW5nc0JvYXJkSW50ZWdyYXRpb25S",
- "ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlKC0+STAkwiRy9hcGkv",
+ "YXRpb25zL2luZmx1eGRiOgEqEqMBChZHZXRJbmZsdXhEYkludGVncmF0aW9u",
+ "EiIuYXBpLkdldEluZmx1eERiSW50ZWdyYXRpb25SZXF1ZXN0GiMuYXBpLkdl",
+ "dEluZmx1eERiSW50ZWdyYXRpb25SZXNwb25zZSJAgtPkkwI6EjgvYXBpL2Fw",
+ "cGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pbmZs",
+ "dXhkYhKrAQoZVXBkYXRlSW5mbHV4RGJJbnRlZ3JhdGlvbhIlLmFwaS5VcGRh",
+ "dGVJbmZsdXhEYkludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1",
+ "Zi5FbXB0eSJPgtPkkwJJGkQvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRp",
+ "b24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pbmZsdXhkYjoBKhKc",
+ "AQoZRGVsZXRlSW5mbHV4RGJJbnRlZ3JhdGlvbhIlLmFwaS5EZWxldGVJbmZs",
+ "dXhEYkludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0",
+ "eSJAgtPkkwI6KjgvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9",
+ "L2ludGVncmF0aW9ucy9pbmZsdXhkYhK0AQocQ3JlYXRlVGhpbmdzQm9hcmRJ",
+ "bnRlZ3JhdGlvbhIoLmFwaS5DcmVhdGVUaGluZ3NCb2FyZEludGVncmF0aW9u",
+ "UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJSgtPkkwJMIkcvYXBp",
+ "L2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2lu",
+ "dGVncmF0aW9ucy90aGluZ3Nib2FyZDoBKhKvAQoZR2V0VGhpbmdzQm9hcmRJ",
+ "bnRlZ3JhdGlvbhIlLmFwaS5HZXRUaGluZ3NCb2FyZEludGVncmF0aW9uUmVx",
+ "dWVzdBomLmFwaS5HZXRUaGluZ3NCb2FyZEludGVncmF0aW9uUmVzcG9uc2Ui",
+ "Q4LT5JMCPRI7L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9p",
+ "bnRlZ3JhdGlvbnMvdGhpbmdzYm9hcmQStAEKHFVwZGF0ZVRoaW5nc0JvYXJk",
+ "SW50ZWdyYXRpb24SKC5hcGkuVXBkYXRlVGhpbmdzQm9hcmRJbnRlZ3JhdGlv",
+ "blJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT5JMCTBpHL2Fw",
+ "aS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9p",
+ "bnRlZ3JhdGlvbnMvdGhpbmdzYm9hcmQ6ASoSpQEKHERlbGV0ZVRoaW5nc0Jv",
+ "YXJkSW50ZWdyYXRpb24SKC5hcGkuRGVsZXRlVGhpbmdzQm9hcmRJbnRlZ3Jh",
+ "dGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiQ4LT5JMCPSo7",
+ "L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlv",
+ "bnMvdGhpbmdzYm9hcmQSrgEKGkNyZWF0ZU15RGV2aWNlc0ludGVncmF0aW9u",
+ "EiYuYXBpLkNyZWF0ZU15RGV2aWNlc0ludGVncmF0aW9uUmVxdWVzdBoWLmdv",
+ "b2dsZS5wcm90b2J1Zi5FbXB0eSJQgtPkkwJKIkUvYXBpL2FwcGxpY2F0aW9u",
+ "cy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9t",
+ "eWRldmljZXM6ASoSpwEKF0dldE15RGV2aWNlc0ludGVncmF0aW9uEiMuYXBp",
+ "LkdldE15RGV2aWNlc0ludGVncmF0aW9uUmVxdWVzdBokLmFwaS5HZXRNeURl",
+ "dmljZXNJbnRlZ3JhdGlvblJlc3BvbnNlIkGC0+STAjsSOS9hcGkvYXBwbGlj",
+ "YXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL215ZGV2aWNl",
+ "cxKuAQoaVXBkYXRlTXlEZXZpY2VzSW50ZWdyYXRpb24SJi5hcGkuVXBkYXRl",
+ "TXlEZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVm",
+ "LkVtcHR5IlCC0+STAkoaRS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlv",
+ "bi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL215ZGV2aWNlczoBKhKf",
+ "AQoaRGVsZXRlTXlEZXZpY2VzSW50ZWdyYXRpb24SJi5hcGkuRGVsZXRlTXlE",
+ "ZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVt",
+ "cHR5IkGC0+STAjsqOS9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9p",
+ "ZH0vaW50ZWdyYXRpb25zL215ZGV2aWNlcxKuAQoaQ3JlYXRlTG9yYUNsb3Vk",
+ "SW50ZWdyYXRpb24SJi5hcGkuQ3JlYXRlTG9yYUNsb3VkSW50ZWdyYXRpb25S",
+ "ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlCC0+STAkoiRS9hcGkv",
"YXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50",
- "ZWdyYXRpb25zL3RoaW5nc2JvYXJkOgEqEq8BChlHZXRUaGluZ3NCb2FyZElu",
- "dGVncmF0aW9uEiUuYXBpLkdldFRoaW5nc0JvYXJkSW50ZWdyYXRpb25SZXF1",
- "ZXN0GiYuYXBpLkdldFRoaW5nc0JvYXJkSW50ZWdyYXRpb25SZXNwb25zZSJD",
- "gtPkkwI9EjsvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2lu",
- "dGVncmF0aW9ucy90aGluZ3Nib2FyZBK0AQocVXBkYXRlVGhpbmdzQm9hcmRJ",
- "bnRlZ3JhdGlvbhIoLmFwaS5VcGRhdGVUaGluZ3NCb2FyZEludGVncmF0aW9u",
- "UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJSgtPkkwJMGkcvYXBp",
- "L2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2lu",
- "dGVncmF0aW9ucy90aGluZ3Nib2FyZDoBKhKlAQocRGVsZXRlVGhpbmdzQm9h",
- "cmRJbnRlZ3JhdGlvbhIoLmFwaS5EZWxldGVUaGluZ3NCb2FyZEludGVncmF0",
- "aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJDgtPkkwI9Kjsv",
+ "ZWdyYXRpb25zL2xvcmFjbG91ZDoBKhKnAQoXR2V0TG9yYUNsb3VkSW50ZWdy",
+ "YXRpb24SIy5hcGkuR2V0TG9yYUNsb3VkSW50ZWdyYXRpb25SZXF1ZXN0GiQu",
+ "YXBpLkdldExvcmFDbG91ZEludGVncmF0aW9uUmVzcG9uc2UiQYLT5JMCOxI5",
+ "L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlv",
+ "bnMvbG9yYWNsb3VkEq4BChpVcGRhdGVMb3JhQ2xvdWRJbnRlZ3JhdGlvbhIm",
+ "LmFwaS5VcGRhdGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29n",
+ "bGUucHJvdG9idWYuRW1wdHkiUILT5JMCShpFL2FwaS9hcHBsaWNhdGlvbnMv",
+ "e2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbG9y",
+ "YWNsb3VkOgEqEp8BChpEZWxldGVMb3JhQ2xvdWRJbnRlZ3JhdGlvbhImLmFw",
+ "aS5EZWxldGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUu",
+ "cHJvdG9idWYuRW1wdHkiQYLT5JMCOyo5L2FwaS9hcHBsaWNhdGlvbnMve2Fw",
+ "cGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbG9yYWNsb3VkErABChpDcmVh",
+ "dGVHY3BQdWJTdWJJbnRlZ3JhdGlvbhImLmFwaS5DcmVhdGVHY3BQdWJTdWJJ",
+ "bnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT",
+ "5JMCTCJHL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0",
+ "aW9uX2lkfS9pbnRlZ3JhdGlvbnMvZ2NwLXB1Yi1zdWI6ASoSqQEKF0dldEdj",
+ "cFB1YlN1YkludGVncmF0aW9uEiMuYXBpLkdldEdjcFB1YlN1YkludGVncmF0",
+ "aW9uUmVxdWVzdBokLmFwaS5HZXRHY3BQdWJTdWJJbnRlZ3JhdGlvblJlc3Bv",
+ "bnNlIkOC0+STAj0SOy9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9p",
+ "ZH0vaW50ZWdyYXRpb25zL2djcC1wdWItc3ViErABChpVcGRhdGVHY3BQdWJT",
+ "dWJJbnRlZ3JhdGlvbhImLmFwaS5VcGRhdGVHY3BQdWJTdWJJbnRlZ3JhdGlv",
+ "blJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT5JMCTBpHL2Fw",
+ "aS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9p",
+ "bnRlZ3JhdGlvbnMvZ2NwLXB1Yi1zdWI6ASoSoQEKGkRlbGV0ZUdjcFB1YlN1",
+ "YkludGVncmF0aW9uEiYuYXBpLkRlbGV0ZUdjcFB1YlN1YkludGVncmF0aW9u",
+ "UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJDgtPkkwI9KjsvYXBp",
+ "L2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9n",
+ "Y3AtcHViLXN1YhKmAQoXQ3JlYXRlQXdzU25zSW50ZWdyYXRpb24SIy5hcGku",
+ "Q3JlYXRlQXdzU25zSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3Rv",
+ "YnVmLkVtcHR5Ik6C0+STAkgiQy9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3Jh",
+ "dGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F3cy1zbnM6ASoS",
+ "nAEKFEdldEF3c1Nuc0ludGVncmF0aW9uEiAuYXBpLkdldEF3c1Nuc0ludGVn",
+ "cmF0aW9uUmVxdWVzdBohLmFwaS5HZXRBd3NTbnNJbnRlZ3JhdGlvblJlc3Bv",
+ "bnNlIj+C0+STAjkSNy9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9p",
+ "ZH0vaW50ZWdyYXRpb25zL2F3cy1zbnMSpgEKF1VwZGF0ZUF3c1Nuc0ludGVn",
+ "cmF0aW9uEiMuYXBpLlVwZGF0ZUF3c1Nuc0ludGVncmF0aW9uUmVxdWVzdBoW",
+ "Lmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJOgtPkkwJIGkMvYXBpL2FwcGxpY2F0",
+ "aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9u",
+ "cy9hd3Mtc25zOgEqEpcBChdEZWxldGVBd3NTbnNJbnRlZ3JhdGlvbhIjLmFw",
+ "aS5EZWxldGVBd3NTbnNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJv",
+ "dG9idWYuRW1wdHkiP4LT5JMCOSo3L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxp",
+ "Y2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXdzLXNucxLCAQogQ3JlYXRlQXp1",
+ "cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb24SLC5hcGkuQ3JlYXRlQXp1cmVTZXJ2",
+ "aWNlQnVzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVt",
+ "cHR5IliC0+STAlIiTS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5h",
+ "cHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F6dXJlLXNlcnZpY2UtYnVz",
+ "OgEqEsEBCh1HZXRBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbhIpLmFwaS5H",
+ "ZXRBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QaKi5hcGkuR2V0",
+ "QXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXNwb25zZSJJgtPkkwJDEkEv",
"YXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9u",
- "cy90aGluZ3Nib2FyZBKuAQoaQ3JlYXRlTXlEZXZpY2VzSW50ZWdyYXRpb24S",
- "Ji5hcGkuQ3JlYXRlTXlEZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29v",
- "Z2xlLnByb3RvYnVmLkVtcHR5IlCC0+STAkoiRS9hcGkvYXBwbGljYXRpb25z",
- "L3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL215",
- "ZGV2aWNlczoBKhKnAQoXR2V0TXlEZXZpY2VzSW50ZWdyYXRpb24SIy5hcGku",
- "R2V0TXlEZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GiQuYXBpLkdldE15RGV2",
- "aWNlc0ludGVncmF0aW9uUmVzcG9uc2UiQYLT5JMCOxI5L2FwaS9hcHBsaWNh",
- "dGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbXlkZXZpY2Vz",
- "Eq4BChpVcGRhdGVNeURldmljZXNJbnRlZ3JhdGlvbhImLmFwaS5VcGRhdGVN",
- "eURldmljZXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu",
- "RW1wdHkiUILT5JMCShpFL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9u",
- "LmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbXlkZXZpY2VzOgEqEp8B",
- "ChpEZWxldGVNeURldmljZXNJbnRlZ3JhdGlvbhImLmFwaS5EZWxldGVNeURl",
- "dmljZXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1w",
- "dHkiQYLT5JMCOyo5L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lk",
- "fS9pbnRlZ3JhdGlvbnMvbXlkZXZpY2VzEq4BChpDcmVhdGVMb3JhQ2xvdWRJ",
- "bnRlZ3JhdGlvbhImLmFwaS5DcmVhdGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJl",
- "cXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUILT5JMCSiJFL2FwaS9h",
- "cHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRl",
- "Z3JhdGlvbnMvbG9yYWNsb3VkOgEqEqcBChdHZXRMb3JhQ2xvdWRJbnRlZ3Jh",
- "dGlvbhIjLmFwaS5HZXRMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QaJC5h",
- "cGkuR2V0TG9yYUNsb3VkSW50ZWdyYXRpb25SZXNwb25zZSJBgtPkkwI7Ejkv",
- "YXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9u",
- "cy9sb3JhY2xvdWQSrgEKGlVwZGF0ZUxvcmFDbG91ZEludGVncmF0aW9uEiYu",
- "YXBpLlVwZGF0ZUxvcmFDbG91ZEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2ds",
- "ZS5wcm90b2J1Zi5FbXB0eSJQgtPkkwJKGkUvYXBpL2FwcGxpY2F0aW9ucy97",
- "aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9sb3Jh",
- "Y2xvdWQ6ASoSnwEKGkRlbGV0ZUxvcmFDbG91ZEludGVncmF0aW9uEiYuYXBp",
- "LkRlbGV0ZUxvcmFDbG91ZEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5w",
- "cm90b2J1Zi5FbXB0eSJBgtPkkwI7KjkvYXBpL2FwcGxpY2F0aW9ucy97YXBw",
- "bGljYXRpb25faWR9L2ludGVncmF0aW9ucy9sb3JhY2xvdWQSsAEKGkNyZWF0",
- "ZUdjcFB1YlN1YkludGVncmF0aW9uEiYuYXBpLkNyZWF0ZUdjcFB1YlN1Yklu",
- "dGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJSgtPk",
- "kwJMIkcvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRp",
- "b25faWR9L2ludGVncmF0aW9ucy9nY3AtcHViLXN1YjoBKhKpAQoXR2V0R2Nw",
- "UHViU3ViSW50ZWdyYXRpb24SIy5hcGkuR2V0R2NwUHViU3ViSW50ZWdyYXRp",
- "b25SZXF1ZXN0GiQuYXBpLkdldEdjcFB1YlN1YkludGVncmF0aW9uUmVzcG9u",
- "c2UiQ4LT5JMCPRI7L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lk",
- "fS9pbnRlZ3JhdGlvbnMvZ2NwLXB1Yi1zdWISsAEKGlVwZGF0ZUdjcFB1YlN1",
- "YkludGVncmF0aW9uEiYuYXBpLlVwZGF0ZUdjcFB1YlN1YkludGVncmF0aW9u",
- "UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJSgtPkkwJMGkcvYXBp",
+ "cy9henVyZS1zZXJ2aWNlLWJ1cxLCAQogVXBkYXRlQXp1cmVTZXJ2aWNlQnVz",
+ "SW50ZWdyYXRpb24SLC5hcGkuVXBkYXRlQXp1cmVTZXJ2aWNlQnVzSW50ZWdy",
+ "YXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IliC0+STAlIa",
+ "TS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9p",
+ "ZH0vaW50ZWdyYXRpb25zL2F6dXJlLXNlcnZpY2UtYnVzOgEqErMBCiBEZWxl",
+ "dGVBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbhIsLmFwaS5EZWxldGVBenVy",
+ "ZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9i",
+ "dWYuRW1wdHkiSYLT5JMCQypBL2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0",
+ "aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXp1cmUtc2VydmljZS1idXMStQEKHENy",
+ "ZWF0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb24SKC5hcGkuQ3JlYXRlUGlsb3RU",
+ "aGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1w",
+ "dHkiU4LT5JMCTSJIL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFw",
+ "cGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvcGlsb3QtdGhpbmdzOgEqErAB",
+ "ChlHZXRQaWxvdFRoaW5nc0ludGVncmF0aW9uEiUuYXBpLkdldFBpbG90VGhp",
+ "bmdzSW50ZWdyYXRpb25SZXF1ZXN0GiYuYXBpLkdldFBpbG90VGhpbmdzSW50",
+ "ZWdyYXRpb25SZXNwb25zZSJEgtPkkwI+EjwvYXBpL2FwcGxpY2F0aW9ucy97",
+ "YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9waWxvdC10aGluZ3MStQEK",
+ "HFVwZGF0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb24SKC5hcGkuVXBkYXRlUGls",
+ "b3RUaGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu",
+ "RW1wdHkiU4LT5JMCTRpIL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9u",
+ "LmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvcGlsb3QtdGhpbmdzOgEq",
+ "EqYBChxEZWxldGVQaWxvdFRoaW5nc0ludGVncmF0aW9uEiguYXBpLkRlbGV0",
+ "ZVBpbG90VGhpbmdzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3Rv",
+ "YnVmLkVtcHR5IkSC0+STAj4qPC9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNh",
+ "dGlvbl9pZH0vaW50ZWdyYXRpb25zL3BpbG90LXRoaW5ncxKiAQoWQ3JlYXRl",
+ "SWZ0dHRJbnRlZ3JhdGlvbhIiLmFwaS5DcmVhdGVJZnR0dEludGVncmF0aW9u",
+ "UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJMgtPkkwJGIkEvYXBp",
"L2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2lu",
- "dGVncmF0aW9ucy9nY3AtcHViLXN1YjoBKhKhAQoaRGVsZXRlR2NwUHViU3Vi",
- "SW50ZWdyYXRpb24SJi5hcGkuRGVsZXRlR2NwUHViU3ViSW50ZWdyYXRpb25S",
- "ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkOC0+STAj0qOy9hcGkv",
- "YXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2dj",
- "cC1wdWItc3ViEqYBChdDcmVhdGVBd3NTbnNJbnRlZ3JhdGlvbhIjLmFwaS5D",
- "cmVhdGVBd3NTbnNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9i",
- "dWYuRW1wdHkiToLT5JMCSCJDL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0",
- "aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXdzLXNuczoBKhKc",
- "AQoUR2V0QXdzU25zSW50ZWdyYXRpb24SIC5hcGkuR2V0QXdzU25zSW50ZWdy",
- "YXRpb25SZXF1ZXN0GiEuYXBpLkdldEF3c1Nuc0ludGVncmF0aW9uUmVzcG9u",
- "c2UiP4LT5JMCORI3L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lk",
- "fS9pbnRlZ3JhdGlvbnMvYXdzLXNucxKmAQoXVXBkYXRlQXdzU25zSW50ZWdy",
- "YXRpb24SIy5hcGkuVXBkYXRlQXdzU25zSW50ZWdyYXRpb25SZXF1ZXN0GhYu",
- "Z29vZ2xlLnByb3RvYnVmLkVtcHR5Ik6C0+STAkgaQy9hcGkvYXBwbGljYXRp",
- "b25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25z",
- "L2F3cy1zbnM6ASoSlwEKF0RlbGV0ZUF3c1Nuc0ludGVncmF0aW9uEiMuYXBp",
- "LkRlbGV0ZUF3c1Nuc0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90",
- "b2J1Zi5FbXB0eSI/gtPkkwI5KjcvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGlj",
- "YXRpb25faWR9L2ludGVncmF0aW9ucy9hd3Mtc25zEsIBCiBDcmVhdGVBenVy",
- "ZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbhIsLmFwaS5DcmVhdGVBenVyZVNlcnZp",
- "Y2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1w",
- "dHkiWILT5JMCUiJNL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFw",
- "cGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXp1cmUtc2VydmljZS1idXM6",
- "ASoSwQEKHUdldEF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uEikuYXBpLkdl",
- "dEF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uUmVxdWVzdBoqLmFwaS5HZXRB",
- "enVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlc3BvbnNlIkmC0+STAkMSQS9h",
- "cGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25z",
- "L2F6dXJlLXNlcnZpY2UtYnVzEsIBCiBVcGRhdGVBenVyZVNlcnZpY2VCdXNJ",
- "bnRlZ3JhdGlvbhIsLmFwaS5VcGRhdGVBenVyZVNlcnZpY2VCdXNJbnRlZ3Jh",
- "dGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiWILT5JMCUhpN",
+ "dGVncmF0aW9ucy9pZnR0dDoBKhKXAQoTR2V0SWZ0dHRJbnRlZ3JhdGlvbhIf",
+ "LmFwaS5HZXRJZnR0dEludGVncmF0aW9uUmVxdWVzdBogLmFwaS5HZXRJZnR0",
+ "dEludGVncmF0aW9uUmVzcG9uc2UiPYLT5JMCNxI1L2FwaS9hcHBsaWNhdGlv",
+ "bnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaWZ0dHQSogEKFlVw",
+ "ZGF0ZUlmdHR0SW50ZWdyYXRpb24SIi5hcGkuVXBkYXRlSWZ0dHRJbnRlZ3Jh",
+ "dGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiTILT5JMCRhpB",
"L2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lk",
- "fS9pbnRlZ3JhdGlvbnMvYXp1cmUtc2VydmljZS1idXM6ASoSswEKIERlbGV0",
- "ZUF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uEiwuYXBpLkRlbGV0ZUF6dXJl",
- "U2VydmljZUJ1c0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1",
- "Zi5FbXB0eSJJgtPkkwJDKkEvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRp",
- "b25faWR9L2ludGVncmF0aW9ucy9henVyZS1zZXJ2aWNlLWJ1cxK1AQocQ3Jl",
- "YXRlUGlsb3RUaGluZ3NJbnRlZ3JhdGlvbhIoLmFwaS5DcmVhdGVQaWxvdFRo",
- "aW5nc0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0",
- "eSJTgtPkkwJNIkgvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBw",
- "bGljYXRpb25faWR9L2ludGVncmF0aW9ucy9waWxvdC10aGluZ3M6ASoSsAEK",
- "GUdldFBpbG90VGhpbmdzSW50ZWdyYXRpb24SJS5hcGkuR2V0UGlsb3RUaGlu",
- "Z3NJbnRlZ3JhdGlvblJlcXVlc3QaJi5hcGkuR2V0UGlsb3RUaGluZ3NJbnRl",
- "Z3JhdGlvblJlc3BvbnNlIkSC0+STAj4SPC9hcGkvYXBwbGljYXRpb25zL3th",
- "cHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL3BpbG90LXRoaW5ncxK1AQoc",
- "VXBkYXRlUGlsb3RUaGluZ3NJbnRlZ3JhdGlvbhIoLmFwaS5VcGRhdGVQaWxv",
- "dFRoaW5nc0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5F",
- "bXB0eSJTgtPkkwJNGkgvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24u",
- "YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9waWxvdC10aGluZ3M6ASoS",
- "pgEKHERlbGV0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb24SKC5hcGkuRGVsZXRl",
- "UGlsb3RUaGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9i",
- "dWYuRW1wdHkiRILT5JMCPio8L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0",
- "aW9uX2lkfS9pbnRlZ3JhdGlvbnMvcGlsb3QtdGhpbmdzEqIBChZDcmVhdGVJ",
- "ZnR0dEludGVncmF0aW9uEiIuYXBpLkNyZWF0ZUlmdHR0SW50ZWdyYXRpb25S",
- "ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkyC0+STAkYiQS9hcGkv",
- "YXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50",
- "ZWdyYXRpb25zL2lmdHR0OgEqEpcBChNHZXRJZnR0dEludGVncmF0aW9uEh8u",
- "YXBpLkdldElmdHR0SW50ZWdyYXRpb25SZXF1ZXN0GiAuYXBpLkdldElmdHR0",
- "SW50ZWdyYXRpb25SZXNwb25zZSI9gtPkkwI3EjUvYXBpL2FwcGxpY2F0aW9u",
- "cy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pZnR0dBKiAQoWVXBk",
- "YXRlSWZ0dHRJbnRlZ3JhdGlvbhIiLmFwaS5VcGRhdGVJZnR0dEludGVncmF0",
- "aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJMgtPkkwJGGkEv",
- "YXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9",
- "L2ludGVncmF0aW9ucy9pZnR0dDoBKhKTAQoWRGVsZXRlSWZ0dHRJbnRlZ3Jh",
- "dGlvbhIiLmFwaS5EZWxldGVJZnR0dEludGVncmF0aW9uUmVxdWVzdBoWLmdv",
- "b2dsZS5wcm90b2J1Zi5FbXB0eSI9gtPkkwI3KjUvYXBpL2FwcGxpY2F0aW9u",
- "cy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pZnR0dBLhAQooR2Vu",
- "ZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0aWZpY2F0ZRI0LmFwaS5H",
- "ZW5lcmF0ZU1xdHRJbnRlZ3JhdGlvbkNsaWVudENlcnRpZmljYXRlUmVxdWVz",
- "dBo1LmFwaS5HZW5lcmF0ZU1xdHRJbnRlZ3JhdGlvbkNsaWVudENlcnRpZmlj",
- "YXRlUmVzcG9uc2UiSILT5JMCQiJAL2FwaS9hcHBsaWNhdGlvbnMve2FwcGxp",
- "Y2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbXF0dC9jZXJ0aWZpY2F0ZUJoChFp",
- "by5jaGlycHN0YWNrLmFwaUIQQXBwbGljYXRpb25Qcm90b1ABWi5naXRodWIu",
- "Y29tL2NoaXJwc3RhY2svY2hpcnBzdGFjay9hcGkvZ28vdjQvYXBpqgIOQ2hp",
- "cnBzdGFjay5BcGliBnByb3RvMw=="));
+ "fS9pbnRlZ3JhdGlvbnMvaWZ0dHQ6ASoSkwEKFkRlbGV0ZUlmdHR0SW50ZWdy",
+ "YXRpb24SIi5hcGkuRGVsZXRlSWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QaFi5n",
+ "b29nbGUucHJvdG9idWYuRW1wdHkiPYLT5JMCNyo1L2FwaS9hcHBsaWNhdGlv",
+ "bnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaWZ0dHQS4QEKKEdl",
+ "bmVyYXRlTXF0dEludGVncmF0aW9uQ2xpZW50Q2VydGlmaWNhdGUSNC5hcGku",
+ "R2VuZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0aWZpY2F0ZVJlcXVl",
+ "c3QaNS5hcGkuR2VuZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0aWZp",
+ "Y2F0ZVJlc3BvbnNlIkiC0+STAkIiQC9hcGkvYXBwbGljYXRpb25zL3thcHBs",
+ "aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL21xdHQvY2VydGlmaWNhdGVCaAoR",
+ "aW8uY2hpcnBzdGFjay5hcGlCEEFwcGxpY2F0aW9uUHJvdG9QAVouZ2l0aHVi",
+ "LmNvbS9jaGlycHN0YWNrL2NoaXJwc3RhY2svYXBpL2dvL3Y0L2FwaaoCDkNo",
+ "aXJwc3RhY2suQXBpYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chirpstack.Api.Encoding), typeof(global::Chirpstack.Api.IntegrationKind), typeof(global::Chirpstack.Api.InfluxDbPrecision), typeof(global::Chirpstack.Api.InfluxDbVersion), }, null, new pbr::GeneratedClrTypeInfo[] {
@@ -432,7 +433,7 @@ namespace Chirpstack.Api {
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetPilotThingsIntegrationResponse), global::Chirpstack.Api.GetPilotThingsIntegrationResponse.Parser, new[]{ "Integration" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.UpdatePilotThingsIntegrationRequest), global::Chirpstack.Api.UpdatePilotThingsIntegrationRequest.Parser, new[]{ "Integration" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeletePilotThingsIntegrationRequest), global::Chirpstack.Api.DeletePilotThingsIntegrationRequest.Parser, new[]{ "ApplicationId" }, null, null, null, null),
- new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.IftttIntegration), global::Chirpstack.Api.IftttIntegration.Parser, new[]{ "ApplicationId", "Key", "UplinkValues" }, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.IftttIntegration), global::Chirpstack.Api.IftttIntegration.Parser, new[]{ "ApplicationId", "Key", "UplinkValues", "ArbitraryJson", "EventPrefix" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateIftttIntegrationRequest), global::Chirpstack.Api.CreateIftttIntegrationRequest.Parser, new[]{ "Integration" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetIftttIntegrationRequest), global::Chirpstack.Api.GetIftttIntegrationRequest.Parser, new[]{ "ApplicationId" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetIftttIntegrationResponse), global::Chirpstack.Api.GetIftttIntegrationResponse.Parser, new[]{ "Integration" }, null, null, null, null),
@@ -6136,7 +6137,7 @@ namespace Chirpstack.Api {
public const int IntegrationFieldNumber = 1;
private global::Chirpstack.Api.InfluxDbIntegration integration_;
///
- /// Integration object to update.
+ /// Integration object to update.
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
@@ -10997,7 +10998,8 @@ namespace Chirpstack.Api {
private string credentialsFile_ = "";
///
/// Credentials file.
- /// This IAM service-account credentials file (JSON) must have the following Pub/Sub roles:
+ /// This IAM service-account credentials file (JSON) must have the following
+ /// Pub/Sub roles:
/// * Pub/Sub Publisher
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -16231,6 +16233,8 @@ namespace Chirpstack.Api {
applicationId_ = other.applicationId_;
key_ = other.key_;
uplinkValues_ = other.uplinkValues_.Clone();
+ arbitraryJson_ = other.arbitraryJson_;
+ eventPrefix_ = other.eventPrefix_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@@ -16287,7 +16291,8 @@ namespace Chirpstack.Api {
/// You would specify the following fields:
/// uplink_values = ["batteryLevel", "buttons_0_pressed"]
///
- /// Note: The first value is always used for the DevEUI.
+ /// Notes: The first value is always used for the DevEUI.
+ /// Ignored if arbitrary_json is set to true.
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
@@ -16295,6 +16300,42 @@ namespace Chirpstack.Api {
get { return uplinkValues_; }
}
+ /// Field number for the "arbitrary_json" field.
+ public const int ArbitraryJsonFieldNumber = 4;
+ private bool arbitraryJson_;
+ ///
+ /// Arbitrary JSON.
+ /// If set to true, ChirpStack events will be sent as-is as arbitrary JSON
+ /// payload. If set to false (default), the 3 JSON values format will be used.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public bool ArbitraryJson {
+ get { return arbitraryJson_; }
+ set {
+ arbitraryJson_ = value;
+ }
+ }
+
+ /// Field number for the "event_prefix" field.
+ public const int EventPrefixFieldNumber = 5;
+ private string eventPrefix_ = "";
+ ///
+ /// Event prefix.
+ /// If set, the event name will be PREFIX_EVENT. For example if event_prefix
+ /// is set to weatherstation, and uplink event will be sent as
+ /// weatherstation_up to the IFTTT webhook.
+ /// Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public string EventPrefix {
+ get { return eventPrefix_; }
+ set {
+ eventPrefix_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
@@ -16313,6 +16354,8 @@ namespace Chirpstack.Api {
if (ApplicationId != other.ApplicationId) return false;
if (Key != other.Key) return false;
if(!uplinkValues_.Equals(other.uplinkValues_)) return false;
+ if (ArbitraryJson != other.ArbitraryJson) return false;
+ if (EventPrefix != other.EventPrefix) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -16323,6 +16366,8 @@ namespace Chirpstack.Api {
if (ApplicationId.Length != 0) hash ^= ApplicationId.GetHashCode();
if (Key.Length != 0) hash ^= Key.GetHashCode();
hash ^= uplinkValues_.GetHashCode();
+ if (ArbitraryJson != false) hash ^= ArbitraryJson.GetHashCode();
+ if (EventPrefix.Length != 0) hash ^= EventPrefix.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@@ -16350,6 +16395,14 @@ namespace Chirpstack.Api {
output.WriteString(Key);
}
uplinkValues_.WriteTo(output, _repeated_uplinkValues_codec);
+ if (ArbitraryJson != false) {
+ output.WriteRawTag(32);
+ output.WriteBool(ArbitraryJson);
+ }
+ if (EventPrefix.Length != 0) {
+ output.WriteRawTag(42);
+ output.WriteString(EventPrefix);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@@ -16369,6 +16422,14 @@ namespace Chirpstack.Api {
output.WriteString(Key);
}
uplinkValues_.WriteTo(ref output, _repeated_uplinkValues_codec);
+ if (ArbitraryJson != false) {
+ output.WriteRawTag(32);
+ output.WriteBool(ArbitraryJson);
+ }
+ if (EventPrefix.Length != 0) {
+ output.WriteRawTag(42);
+ output.WriteString(EventPrefix);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@@ -16386,6 +16447,12 @@ namespace Chirpstack.Api {
size += 1 + pb::CodedOutputStream.ComputeStringSize(Key);
}
size += uplinkValues_.CalculateSize(_repeated_uplinkValues_codec);
+ if (ArbitraryJson != false) {
+ size += 1 + 1;
+ }
+ if (EventPrefix.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(EventPrefix);
+ }
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@@ -16405,6 +16472,12 @@ namespace Chirpstack.Api {
Key = other.Key;
}
uplinkValues_.Add(other.uplinkValues_);
+ if (other.ArbitraryJson != false) {
+ ArbitraryJson = other.ArbitraryJson;
+ }
+ if (other.EventPrefix.Length != 0) {
+ EventPrefix = other.EventPrefix;
+ }
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@@ -16432,6 +16505,14 @@ namespace Chirpstack.Api {
uplinkValues_.AddEntriesFrom(input, _repeated_uplinkValues_codec);
break;
}
+ case 32: {
+ ArbitraryJson = input.ReadBool();
+ break;
+ }
+ case 42: {
+ EventPrefix = input.ReadString();
+ break;
+ }
}
}
#endif
@@ -16459,6 +16540,14 @@ namespace Chirpstack.Api {
uplinkValues_.AddEntriesFrom(ref input, _repeated_uplinkValues_codec);
break;
}
+ case 32: {
+ ArbitraryJson = input.ReadBool();
+ break;
+ }
+ case 42: {
+ EventPrefix = input.ReadString();
+ break;
+ }
}
}
}
diff --git a/api/csharp/Chirpstack/api/ApplicationGrpc.cs b/api/csharp/Chirpstack/api/ApplicationGrpc.cs
index 7e6e9098..c8369f27 100644
--- a/api/csharp/Chirpstack/api/ApplicationGrpc.cs
+++ b/api/csharp/Chirpstack/api/ApplicationGrpc.cs
@@ -9,7 +9,8 @@ using grpc = global::Grpc.Core;
namespace Chirpstack.Api {
///
- /// ApplicationService is the service providing API methods for managing applications.
+ /// ApplicationService is the service providing API methods for managing
+ /// applications.
///
public static partial class ApplicationService
{
diff --git a/api/go/api/application.pb.go b/api/go/api/application.pb.go
index cc34d638..73916259 100644
--- a/api/go/api/application.pb.go
+++ b/api/go/api/application.pb.go
@@ -2803,7 +2803,8 @@ type GcpPubSubIntegration struct {
// Encoding.
Encoding Encoding `protobuf:"varint,2,opt,name=encoding,proto3,enum=api.Encoding" json:"encoding,omitempty"`
// Credentials file.
- // This IAM service-account credentials file (JSON) must have the following Pub/Sub roles:
+ // This IAM service-account credentials file (JSON) must have the following
+ // Pub/Sub roles:
// * Pub/Sub Publisher
CredentialsFile string `protobuf:"bytes,3,opt,name=credentials_file,json=credentialsFile,proto3" json:"credentials_file,omitempty"`
// Project ID.
@@ -4097,8 +4098,19 @@ type IftttIntegration struct {
// You would specify the following fields:
// uplink_values = ["batteryLevel", "buttons_0_pressed"]
//
- // Note: The first value is always used for the DevEUI.
+ // Notes: The first value is always used for the DevEUI.
+ // Ignored if arbitrary_json is set to true.
UplinkValues []string `protobuf:"bytes,3,rep,name=uplink_values,json=uplinkValues,proto3" json:"uplink_values,omitempty"`
+ // Arbitrary JSON.
+ // If set to true, ChirpStack events will be sent as-is as arbitrary JSON
+ // payload. If set to false (default), the 3 JSON values format will be used.
+ ArbitraryJson bool `protobuf:"varint,4,opt,name=arbitrary_json,json=arbitraryJson,proto3" json:"arbitrary_json,omitempty"`
+ // Event prefix.
+ // If set, the event name will be PREFIX_EVENT. For example if event_prefix
+ // is set to weatherstation, and uplink event will be sent as
+ // weatherstation_up to the IFTTT webhook.
+ // Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
+ EventPrefix string `protobuf:"bytes,5,opt,name=event_prefix,json=eventPrefix,proto3" json:"event_prefix,omitempty"`
}
func (x *IftttIntegration) Reset() {
@@ -4154,6 +4166,20 @@ func (x *IftttIntegration) GetUplinkValues() []string {
return nil
}
+func (x *IftttIntegration) GetArbitraryJson() bool {
+ if x != nil {
+ return x.ArbitraryJson
+ }
+ return false
+}
+
+func (x *IftttIntegration) GetEventPrefix() string {
+ if x != nil {
+ return x.EventPrefix
+ }
+ return ""
+}
+
type CreateIftttIntegrationRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -5017,569 +5043,574 @@ var file_api_application_proto_rawDesc = []byte{
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a,
0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x70, 0x0a, 0x10, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12,
- 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
- 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x58, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
- 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67,
- 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61,
- 0x70, 0x69, 0x2e, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x22, 0x43, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25,
- 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x56, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x49, 0x66, 0x74, 0x74,
- 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e,
- 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x58, 0x0a,
- 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37,
- 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49,
- 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x46, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74,
- 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22,
- 0x58, 0x0a, 0x2f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49,
- 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
- 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xba, 0x01, 0x0a, 0x30, 0x47, 0x65,
+ 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xba, 0x01, 0x0a, 0x10, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x70, 0x6c, 0x69, 0x6e,
+ 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x72, 0x62, 0x69, 0x74,
+ 0x72, 0x61, 0x72, 0x79, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x0d, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x72, 0x79, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x21,
+ 0x0a, 0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x05,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69,
+ 0x78, 0x22, 0x58, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74,
+ 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x66,
+ 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b,
+ 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x43, 0x0a, 0x1a, 0x47,
+ 0x65, 0x74, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64,
+ 0x22, 0x56, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x37, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x66, 0x74, 0x74, 0x74,
+ 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x58, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x69, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
+ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x46, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74,
+ 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x2f, 0x47, 0x65,
0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69,
- 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19,
- 0x0a, 0x08, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x07, 0x74, 0x6c, 0x73, 0x43, 0x65, 0x72, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6c, 0x73,
- 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6c, 0x73, 0x4b,
- 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x65,
- 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x65, 0x78, 0x70,
- 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x2a, 0x22, 0x0a, 0x08, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69,
- 0x6e, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08,
- 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x42, 0x55, 0x46, 0x10, 0x01, 0x2a, 0xbf, 0x01, 0x0a, 0x0f, 0x49,
- 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x08,
- 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x46, 0x4c,
- 0x55, 0x58, 0x5f, 0x44, 0x42, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x48, 0x49, 0x4e, 0x47,
- 0x53, 0x5f, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x59, 0x5f,
- 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x4f, 0x52,
- 0x41, 0x5f, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x43, 0x50,
- 0x5f, 0x50, 0x55, 0x42, 0x5f, 0x53, 0x55, 0x42, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x57,
- 0x53, 0x5f, 0x53, 0x4e, 0x53, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x5a, 0x55, 0x52, 0x45,
- 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x42, 0x55, 0x53, 0x10, 0x07, 0x12, 0x10,
- 0x0a, 0x0c, 0x50, 0x49, 0x4c, 0x4f, 0x54, 0x5f, 0x54, 0x48, 0x49, 0x4e, 0x47, 0x53, 0x10, 0x08,
- 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x51, 0x54, 0x54, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10,
- 0x09, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x46, 0x54, 0x54, 0x54, 0x10, 0x0a, 0x2a, 0x3f, 0x0a, 0x11,
- 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f,
- 0x6e, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x53, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x55, 0x10, 0x01,
- 0x12, 0x06, 0x0a, 0x02, 0x4d, 0x53, 0x10, 0x02, 0x12, 0x05, 0x0a, 0x01, 0x53, 0x10, 0x03, 0x12,
- 0x05, 0x0a, 0x01, 0x4d, 0x10, 0x04, 0x12, 0x05, 0x0a, 0x01, 0x48, 0x10, 0x05, 0x2a, 0x31, 0x0a,
- 0x0f, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
- 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x46, 0x4c, 0x55, 0x58, 0x44, 0x42, 0x5f, 0x31, 0x10, 0x00,
- 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x46, 0x4c, 0x55, 0x58, 0x44, 0x42, 0x5f, 0x32, 0x10, 0x01,
- 0x32, 0xb8, 0x3c, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x65, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61,
- 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x5e,
- 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41,
- 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e,
- 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x6e,
- 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
- 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x1a, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70,
+ 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a,
+ 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xba, 0x01, 0x0a, 0x30, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
+ 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6c, 0x73,
+ 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6c, 0x73,
+ 0x43, 0x65, 0x72, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6c, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6c, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a,
+ 0x07, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65,
+ 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d,
+ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41,
+ 0x74, 0x2a, 0x22, 0x0a, 0x08, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x08, 0x0a,
+ 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x4f, 0x54, 0x4f,
+ 0x42, 0x55, 0x46, 0x10, 0x01, 0x2a, 0xbf, 0x01, 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54,
+ 0x50, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x46, 0x4c, 0x55, 0x58, 0x5f, 0x44, 0x42,
+ 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x48, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x42, 0x4f, 0x41,
+ 0x52, 0x44, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x59, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43,
+ 0x45, 0x53, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x4f, 0x52, 0x41, 0x5f, 0x43, 0x4c, 0x4f,
+ 0x55, 0x44, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x43, 0x50, 0x5f, 0x50, 0x55, 0x42, 0x5f,
+ 0x53, 0x55, 0x42, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x57, 0x53, 0x5f, 0x53, 0x4e, 0x53,
+ 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56,
+ 0x49, 0x43, 0x45, 0x5f, 0x42, 0x55, 0x53, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x49, 0x4c,
+ 0x4f, 0x54, 0x5f, 0x54, 0x48, 0x49, 0x4e, 0x47, 0x53, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x4d,
+ 0x51, 0x54, 0x54, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, 0x09, 0x12, 0x09, 0x0a, 0x05,
+ 0x49, 0x46, 0x54, 0x54, 0x54, 0x10, 0x0a, 0x2a, 0x3f, 0x0a, 0x11, 0x49, 0x6e, 0x66, 0x6c, 0x75,
+ 0x78, 0x44, 0x62, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x06, 0x0a, 0x02,
+ 0x4e, 0x53, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x55, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4d,
+ 0x53, 0x10, 0x02, 0x12, 0x05, 0x0a, 0x01, 0x53, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x4d, 0x10,
+ 0x04, 0x12, 0x05, 0x0a, 0x01, 0x48, 0x10, 0x05, 0x2a, 0x31, 0x0a, 0x0f, 0x49, 0x6e, 0x66, 0x6c,
+ 0x75, 0x78, 0x44, 0x62, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49,
+ 0x4e, 0x46, 0x4c, 0x55, 0x58, 0x44, 0x42, 0x5f, 0x31, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x49,
+ 0x4e, 0x46, 0x4c, 0x55, 0x58, 0x44, 0x42, 0x5f, 0x32, 0x10, 0x01, 0x32, 0xb8, 0x3c, 0x0a, 0x12,
+ 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69,
+ 0x63, 0x65, 0x12, 0x65, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61,
+ 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70,
+ 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4,
+ 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x5e, 0x0a, 0x03, 0x47, 0x65, 0x74,
+ 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61,
+ 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+ 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x6e, 0x0a, 0x06, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93,
+ 0x02, 0x27, 0x1a, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x06, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93,
+ 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x5e, 0x0a, 0x04, 0x4c, 0x69,
+ 0x73, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x88, 0x01, 0x0a, 0x10, 0x4c,
+ 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
+ 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e,
+ 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3,
+ 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70,
+ 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93,
+ 0x02, 0x45, 0x22, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
+ 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x93, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x48,
+ 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e,
+ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f,
+ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70,
0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x5f,
- 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
- 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12,
- 0x5e, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69,
- 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74,
- 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x61,
- 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
- 0x88, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49,
- 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f,
- 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x15, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
- 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x22, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70,
- 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x93, 0x01, 0x0a,
- 0x12, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74,
- 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74,
- 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, 0x2f, 0x61,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x12, 0x9f, 0x01,
+ 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
+ 0x74, 0x79, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x1a, 0x40, 0x2f, 0x61, 0x70, 0x69,
+ 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69,
+ 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x01, 0x2a, 0x12,
+ 0x90, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
+ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
+ 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x2a, 0x34, 0x2f, 0x61,
0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d,
0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x68, 0x74,
- 0x74, 0x70, 0x12, 0x9f, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74,
- 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61,
- 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x1a,
- 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
- 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f,
- 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x68, 0x74, 0x74,
- 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x90, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48,
- 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21,
- 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49,
- 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02,
- 0x36, 0x2a, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x12, 0xab, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
- 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x22, 0x44, 0x2f, 0x61,
- 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
- 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x78,
- 0x64, 0x62, 0x3a, 0x01, 0x2a, 0x12, 0xa3, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66,
+ 0x74, 0x70, 0x12, 0xab, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66,
+ 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66,
0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78,
- 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e,
- 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02,
- 0x3a, 0x12, 0x38, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x64, 0x62, 0x12, 0xab, 0x01, 0x0a, 0x19,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
- 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49,
- 0x1a, 0x44, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d,
- 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x6e,
- 0x66, 0x6c, 0x75, 0x78, 0x64, 0x62, 0x3a, 0x01, 0x2a, 0x12, 0x9c, 0x01, 0x0a, 0x19, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x2a, 0x38,
- 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
- 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
- 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x64, 0x62, 0x12, 0xb4, 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e,
- 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72,
- 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x52, 0x82, 0xd3, 0xe4,
- 0x93, 0x02, 0x4c, 0x22, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
- 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x2f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x3a, 0x01, 0x2a, 0x12,
- 0xaf, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61,
- 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e,
- 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61,
- 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68,
- 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x82, 0xd3,
- 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x62, 0x6f, 0x61, 0x72,
- 0x64, 0x12, 0xb4, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e,
- 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54,
- 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
- 0x6d, 0x70, 0x74, 0x79, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x1a, 0x47, 0x2f, 0x61,
- 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
- 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73,
- 0x62, 0x6f, 0x61, 0x72, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0xa5, 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x6c,
- 0x65, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e,
- 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72,
- 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x43, 0x82, 0xd3, 0xe4,
- 0x93, 0x02, 0x3d, 0x2a, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x62, 0x6f, 0x61, 0x72, 0x64,
- 0x12, 0xae, 0x01, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76,
- 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65,
- 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
- 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x22, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70,
+ 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x22, 0x44, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70,
0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65,
0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6d, 0x79, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x01,
- 0x2a, 0x12, 0xa7, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63,
- 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e,
- 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73,
- 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65,
- 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b,
- 0x12, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x2f, 0x6d, 0x79, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0xae, 0x01, 0x0a, 0x1a,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49,
- 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69,
- 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73,
- 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93,
- 0x02, 0x4a, 0x1a, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
- 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
- 0x6d, 0x79, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x9f, 0x01, 0x0a,
- 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73,
- 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70,
- 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
- 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x41, 0x82, 0xd3, 0xe4,
- 0x93, 0x02, 0x3b, 0x2a, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6d, 0x79, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0xae,
- 0x01, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f,
- 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e,
- 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c,
- 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x50, 0x82,
- 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x22, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x01, 0x2a, 0x12,
- 0xa7, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64,
- 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70,
- 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c,
- 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, 0x39,
- 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
- 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
- 0x6c, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x12, 0xae, 0x01, 0x0a, 0x1a, 0x55, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
- 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a,
- 0x1a, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d,
- 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x6f,
- 0x72, 0x61, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x9f, 0x01, 0x0a, 0x1a, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e,
- 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49,
- 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02,
- 0x3b, 0x2a, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x12, 0xb0, 0x01, 0x0a,
- 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62,
- 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70,
- 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75,
- 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x52, 0x82, 0xd3, 0xe4,
- 0x93, 0x02, 0x4c, 0x22, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
- 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x2f, 0x67, 0x63, 0x70, 0x2d, 0x70, 0x75, 0x62, 0x2d, 0x73, 0x75, 0x62, 0x3a, 0x01, 0x2a, 0x12,
- 0xa9, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62,
- 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70,
- 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62,
- 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b,
- 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
- 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
- 0x67, 0x63, 0x70, 0x2d, 0x70, 0x75, 0x62, 0x2d, 0x73, 0x75, 0x62, 0x12, 0xb0, 0x01, 0x0a, 0x1a,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49,
- 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69,
- 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62,
- 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93,
- 0x02, 0x4c, 0x1a, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
- 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
- 0x67, 0x63, 0x70, 0x2d, 0x70, 0x75, 0x62, 0x2d, 0x73, 0x75, 0x62, 0x3a, 0x01, 0x2a, 0x12, 0xa1,
- 0x01, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53,
- 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e,
- 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62,
- 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x43, 0x82,
- 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x2a, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x63, 0x70, 0x2d, 0x70, 0x75, 0x62, 0x2d, 0x73,
- 0x75, 0x62, 0x12, 0xa6, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73,
- 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23,
- 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e,
- 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4e, 0x82, 0xd3, 0xe4,
- 0x93, 0x02, 0x48, 0x22, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
- 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x2f, 0x61, 0x77, 0x73, 0x2d, 0x73, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x9c, 0x01, 0x0a, 0x14,
- 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x77,
- 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74,
- 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02,
- 0x39, 0x12, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x2f, 0x61, 0x77, 0x73, 0x2d, 0x73, 0x6e, 0x73, 0x12, 0xa6, 0x01, 0x0a, 0x17, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67,
- 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x64, 0x62, 0x3a, 0x01, 0x2a,
+ 0x12, 0xa3, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62,
+ 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70,
+ 0x69, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44,
+ 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x12, 0x38, 0x2f, 0x61,
+ 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
+ 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d,
+ 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x6e,
+ 0x66, 0x6c, 0x75, 0x78, 0x64, 0x62, 0x12, 0xab, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
- 0x70, 0x74, 0x79, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x1a, 0x43, 0x2f, 0x61, 0x70,
+ 0x70, 0x74, 0x79, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x1a, 0x44, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b,
0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c,
0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x77, 0x73, 0x2d, 0x73, 0x6e, 0x73,
- 0x3a, 0x01, 0x2a, 0x12, 0x97, 0x01, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x77,
- 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53,
- 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3f, 0x82, 0xd3,
- 0xe4, 0x93, 0x02, 0x39, 0x2a, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69,
- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x77, 0x73, 0x2d, 0x73, 0x6e, 0x73, 0x12, 0xc2, 0x01,
- 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72,
- 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41,
- 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
- 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52,
- 0x22, 0x4d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d,
- 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x7a,
- 0x75, 0x72, 0x65, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x62, 0x75, 0x73, 0x3a,
- 0x01, 0x2a, 0x12, 0xc1, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53,
- 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x7a,
- 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65,
- 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x82, 0xd3, 0xe4,
- 0x93, 0x02, 0x43, 0x12, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69,
- 0x63, 0x65, 0x2d, 0x62, 0x75, 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73,
- 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x61, 0x70,
- 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72,
- 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x64,
+ 0x62, 0x3a, 0x01, 0x2a, 0x12, 0x9c, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49,
+ 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49,
+ 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
- 0x79, 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x1a, 0x4d, 0x2f, 0x61, 0x70, 0x69, 0x2f,
- 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2d, 0x73, 0x65, 0x72,
- 0x76, 0x69, 0x63, 0x65, 0x2d, 0x62, 0x75, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xb3, 0x01, 0x0a, 0x20,
- 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69,
- 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x12, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x7a, 0x75,
- 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65,
+ 0x79, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x2a, 0x38, 0x2f, 0x61, 0x70, 0x69, 0x2f,
+ 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x75,
+ 0x78, 0x64, 0x62, 0x12, 0xb4, 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x68,
+ 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65,
0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x2a, 0x41,
+ 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x22, 0x47,
+ 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69,
+ 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x74, 0x68, 0x69, 0x6e,
+ 0x67, 0x73, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0xaf, 0x01, 0x0a, 0x19, 0x47,
+ 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47,
+ 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42,
+ 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12,
+ 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+ 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x2f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0xb4, 0x01, 0x0a,
+ 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61,
+ 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e,
+ 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73,
+ 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
+ 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x1a, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x62, 0x6f, 0x61, 0x72, 0x64,
+ 0x3a, 0x01, 0x2a, 0x12, 0xa5, 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x68,
+ 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
+ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+ 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x2a, 0x3b,
+ 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
+ 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
+ 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0xae, 0x01, 0x0a, 0x1a,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49,
+ 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73,
+ 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93,
+ 0x02, 0x4a, 0x22, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
+ 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
+ 0x6d, 0x79, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa7, 0x01, 0x0a,
+ 0x17, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47,
+ 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e,
+ 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73,
+ 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, 0x39, 0x2f, 0x61, 0x70,
+ 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b,
+ 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f,
+ 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6d, 0x79, 0x64,
+ 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0xae, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+ 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x1a, 0x45, 0x2f,
+ 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6d, 0x79, 0x64, 0x65, 0x76,
+ 0x69, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x9f, 0x01, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
+ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+ 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x2a, 0x39,
+ 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
+ 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
+ 0x6d, 0x79, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0xae, 0x01, 0x0a, 0x1a, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+ 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a,
+ 0x22, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d,
+ 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x6f,
+ 0x72, 0x61, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0xa7, 0x01, 0x0a, 0x17, 0x47,
+ 0x65, 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74,
+ 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70,
+ 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f,
+ 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x63,
+ 0x6c, 0x6f, 0x75, 0x64, 0x12, 0xae, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c,
+ 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
+ 0x70, 0x74, 0x79, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x1a, 0x45, 0x2f, 0x61, 0x70,
+ 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b,
+ 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x6f,
+ 0x75, 0x64, 0x3a, 0x01, 0x2a, 0x12, 0x9f, 0x01, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
+ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
+ 0x6d, 0x70, 0x74, 0x79, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x2a, 0x39, 0x2f, 0x61,
+ 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
+ 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d,
+ 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x6f,
+ 0x72, 0x61, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x12, 0xb0, 0x01, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
+ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+ 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x22, 0x47,
+ 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69,
+ 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x63, 0x70, 0x2d,
+ 0x70, 0x75, 0x62, 0x2d, 0x73, 0x75, 0x62, 0x3a, 0x01, 0x2a, 0x12, 0xa9, 0x01, 0x0a, 0x17, 0x47,
+ 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74,
+ 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70,
+ 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f,
+ 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x63, 0x70, 0x2d, 0x70,
+ 0x75, 0x62, 0x2d, 0x73, 0x75, 0x62, 0x12, 0xb0, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+ 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x1a, 0x47, 0x2f,
+ 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x63, 0x70, 0x2d, 0x70,
+ 0x75, 0x62, 0x2d, 0x73, 0x75, 0x62, 0x3a, 0x01, 0x2a, 0x12, 0xa1, 0x01, 0x0a, 0x1a, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+ 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d,
+ 0x2a, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2f, 0x67, 0x63, 0x70, 0x2d, 0x70, 0x75, 0x62, 0x2d, 0x73, 0x75, 0x62, 0x12, 0xa6, 0x01,
+ 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
+ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+ 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x22, 0x43,
+ 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69,
+ 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x77, 0x73, 0x2d,
+ 0x73, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x9c, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x77,
+ 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49,
+ 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e,
+ 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x61,
+ 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
+ 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d,
+ 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x77,
+ 0x73, 0x2d, 0x73, 0x6e, 0x73, 0x12, 0xa6, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x77,
+ 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4e,
+ 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x1a, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x77, 0x73, 0x2d, 0x73, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x97,
+ 0x01, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49,
+ 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+ 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x2a,
+ 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+ 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x2f, 0x61, 0x77, 0x73, 0x2d, 0x73, 0x6e, 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x20, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42,
+ 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e,
+ 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
+ 0x70, 0x74, 0x79, 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x22, 0x4d, 0x2f, 0x61, 0x70,
+ 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b,
+ 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2d, 0x73,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x62, 0x75, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xc1, 0x01,
+ 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+ 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, 0x41,
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
0x61, 0x7a, 0x75, 0x72, 0x65, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x62, 0x75,
- 0x73, 0x12, 0xb5, 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f,
- 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50,
- 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
- 0x6d, 0x70, 0x74, 0x79, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x22, 0x48, 0x2f, 0x61,
- 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
- 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x70, 0x69, 0x6c, 0x6f, 0x74, 0x2d,
- 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xb0, 0x01, 0x0a, 0x19, 0x47, 0x65,
- 0x74, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65,
- 0x74, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26,
- 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69,
- 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c,
- 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
- 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
- 0x70, 0x69, 0x6c, 0x6f, 0x74, 0x2d, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xb5, 0x01, 0x0a,
- 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e,
+ 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72,
+ 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42,
+ 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x58, 0x82, 0xd3,
+ 0xe4, 0x93, 0x02, 0x52, 0x1a, 0x4d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2f, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d,
+ 0x62, 0x75, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xb3, 0x01, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73,
+ 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x61, 0x70,
+ 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72,
+ 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
+ 0x79, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x2a, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f,
+ 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x7a, 0x75, 0x72, 0x65,
+ 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x62, 0x75, 0x73, 0x12, 0xb5, 0x01, 0x0a,
+ 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e,
0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e,
- 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54,
+ 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54,
0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
- 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x1a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70,
+ 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x22, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70,
0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65,
0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x70, 0x69, 0x6c, 0x6f, 0x74, 0x2d, 0x74, 0x68, 0x69, 0x6e, 0x67,
- 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa6, 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50,
- 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65,
- 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
- 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a,
- 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
- 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x2f, 0x70, 0x69, 0x6c, 0x6f, 0x74, 0x2d, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xa2, 0x01,
- 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
- 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
- 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x22, 0x41, 0x2f, 0x61,
- 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
- 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70,
- 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x66, 0x74, 0x74, 0x74, 0x3a,
- 0x01, 0x2a, 0x12, 0x97, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49,
- 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69,
- 0x2e, 0x47, 0x65, 0x74, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70,
- 0x69, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x82,
- 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x66, 0x74, 0x74, 0x74, 0x12, 0xa2, 0x01, 0x0a,
- 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
- 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
- 0x70, 0x74, 0x79, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x1a, 0x41, 0x2f, 0x61, 0x70,
- 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b,
- 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c,
- 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65,
- 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x66, 0x74, 0x74, 0x74, 0x3a, 0x01,
- 0x2a, 0x12, 0x93, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74,
- 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61,
- 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
- 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37,
- 0x2a, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x2f, 0x69, 0x66, 0x74, 0x74, 0x74, 0x12, 0xe1, 0x01, 0x0a, 0x28, 0x47, 0x65, 0x6e, 0x65,
- 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69,
- 0x63, 0x61, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72,
- 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
- 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x61, 0x70, 0x69,
- 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74,
- 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65,
- 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x22, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f,
+ 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xb0, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6c, 0x6f,
+ 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6c, 0x6f,
+ 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+ 0x47, 0x65, 0x74, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f,
0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70,
0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e,
- 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6d, 0x71, 0x74, 0x74, 0x2f,
- 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x42, 0x68, 0x0a, 0x11, 0x69,
- 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69,
- 0x42, 0x10, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f,
- 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
- 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72,
- 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34,
- 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
- 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x70, 0x69, 0x6c, 0x6f, 0x74,
+ 0x2d, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xb5, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74,
+ 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55,
+ 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73,
+ 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93,
+ 0x02, 0x4d, 0x1a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
+ 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
+ 0x70, 0x69, 0x6c, 0x6f, 0x74, 0x2d, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12,
+ 0xa6, 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54,
+ 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, 0x6c,
+ 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f,
+ 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70,
+ 0x74, 0x79, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x61, 0x70, 0x69,
+ 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61,
+ 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69,
+ 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x70, 0x69, 0x6c, 0x6f,
+ 0x74, 0x2d, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xa2, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22,
+ 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x22, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70,
+ 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x66, 0x74, 0x74, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x97, 0x01,
+ 0x0a, 0x13, 0x47, 0x65, 0x74, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x49,
+ 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74,
+ 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37,
+ 0x12, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2f, 0x69, 0x66, 0x74, 0x74, 0x74, 0x12, 0xa2, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49,
+ 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4c,
+ 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x1a, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x65, 0x67,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x66, 0x74, 0x74, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x93, 0x01, 0x0a,
+ 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65,
+ 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f,
+ 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
+ 0x70, 0x74, 0x79, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x2a, 0x35, 0x2f, 0x61, 0x70,
+ 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b,
+ 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f,
+ 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x69, 0x66, 0x74,
+ 0x74, 0x74, 0x12, 0xe1, 0x01, 0x0a, 0x28, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d,
+ 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c,
+ 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12,
+ 0x34, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71,
+ 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69,
+ 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65,
+ 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69,
+ 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x82, 0xd3,
+ 0xe4, 0x93, 0x02, 0x42, 0x22, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6d, 0x71, 0x74, 0x74, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69,
+ 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x42, 0x68, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69,
+ 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x10, 0x41, 0x70, 0x70,
+ 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
+ 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72,
+ 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
+ 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa,
+ 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69,
+ 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/api/grpc-web/api/application_pb.d.ts b/api/grpc-web/api/application_pb.d.ts
index 37788ff8..05195153 100644
--- a/api/grpc-web/api/application_pb.d.ts
+++ b/api/grpc-web/api/application_pb.d.ts
@@ -1555,6 +1555,12 @@ export class IftttIntegration extends jspb.Message {
clearUplinkValuesList(): IftttIntegration;
addUplinkValues(value: string, index?: number): IftttIntegration;
+ getArbitraryJson(): boolean;
+ setArbitraryJson(value: boolean): IftttIntegration;
+
+ getEventPrefix(): string;
+ setEventPrefix(value: string): IftttIntegration;
+
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): IftttIntegration.AsObject;
static toObject(includeInstance: boolean, msg: IftttIntegration): IftttIntegration.AsObject;
@@ -1568,6 +1574,8 @@ export namespace IftttIntegration {
applicationId: string,
key: string,
uplinkValuesList: Array,
+ arbitraryJson: boolean,
+ eventPrefix: string,
}
}
diff --git a/api/grpc-web/api/application_pb.js b/api/grpc-web/api/application_pb.js
index b34b9b89..977cf9f0 100644
--- a/api/grpc-web/api/application_pb.js
+++ b/api/grpc-web/api/application_pb.js
@@ -13195,7 +13195,9 @@ proto.api.IftttIntegration.toObject = function(includeInstance, msg) {
var f, obj = {
applicationId: jspb.Message.getFieldWithDefault(msg, 1, ""),
key: jspb.Message.getFieldWithDefault(msg, 2, ""),
- uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f
+ uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f,
+ arbitraryJson: jspb.Message.getBooleanFieldWithDefault(msg, 4, false),
+ eventPrefix: jspb.Message.getFieldWithDefault(msg, 5, "")
};
if (includeInstance) {
@@ -13244,6 +13246,14 @@ proto.api.IftttIntegration.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {string} */ (reader.readString());
msg.addUplinkValues(value);
break;
+ case 4:
+ var value = /** @type {boolean} */ (reader.readBool());
+ msg.setArbitraryJson(value);
+ break;
+ case 5:
+ var value = /** @type {string} */ (reader.readString());
+ msg.setEventPrefix(value);
+ break;
default:
reader.skipField();
break;
@@ -13294,6 +13304,20 @@ proto.api.IftttIntegration.serializeBinaryToWriter = function(message, writer) {
f
);
}
+ f = message.getArbitraryJson();
+ if (f) {
+ writer.writeBool(
+ 4,
+ f
+ );
+ }
+ f = message.getEventPrefix();
+ if (f.length > 0) {
+ writer.writeString(
+ 5,
+ f
+ );
+ }
};
@@ -13370,6 +13394,42 @@ proto.api.IftttIntegration.prototype.clearUplinkValuesList = function() {
};
+/**
+ * optional bool arbitrary_json = 4;
+ * @return {boolean}
+ */
+proto.api.IftttIntegration.prototype.getArbitraryJson = function() {
+ return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
+};
+
+
+/**
+ * @param {boolean} value
+ * @return {!proto.api.IftttIntegration} returns this
+ */
+proto.api.IftttIntegration.prototype.setArbitraryJson = function(value) {
+ return jspb.Message.setProto3BooleanField(this, 4, value);
+};
+
+
+/**
+ * optional string event_prefix = 5;
+ * @return {string}
+ */
+proto.api.IftttIntegration.prototype.getEventPrefix = function() {
+ return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.api.IftttIntegration} returns this
+ */
+proto.api.IftttIntegration.prototype.setEventPrefix = function(value) {
+ return jspb.Message.setProto3StringField(this, 5, value);
+};
+
+
diff --git a/api/js/api/application_grpc_pb.js b/api/js/api/application_grpc_pb.js
index 66500103..7eaea8f8 100644
--- a/api/js/api/application_grpc_pb.js
+++ b/api/js/api/application_grpc_pb.js
@@ -701,7 +701,8 @@ function deserialize_google_protobuf_Empty(buffer_arg) {
}
-// ApplicationService is the service providing API methods for managing applications.
+// ApplicationService is the service providing API methods for managing
+// applications.
var ApplicationServiceService = exports.ApplicationServiceService = {
// Create creates the given application.
create: {
diff --git a/api/js/api/application_pb.d.ts b/api/js/api/application_pb.d.ts
index 02505a9c..31f538dc 100644
--- a/api/js/api/application_pb.d.ts
+++ b/api/js/api/application_pb.d.ts
@@ -1691,6 +1691,12 @@ export class IftttIntegration extends jspb.Message {
setUplinkValuesList(value: Array): void;
addUplinkValues(value: string, index?: number): string;
+ getArbitraryJson(): boolean;
+ setArbitraryJson(value: boolean): void;
+
+ getEventPrefix(): string;
+ setEventPrefix(value: string): void;
+
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): IftttIntegration.AsObject;
static toObject(includeInstance: boolean, msg: IftttIntegration): IftttIntegration.AsObject;
@@ -1706,6 +1712,8 @@ export namespace IftttIntegration {
applicationId: string,
key: string,
uplinkValuesList: Array,
+ arbitraryJson: boolean,
+ eventPrefix: string,
}
}
diff --git a/api/js/api/application_pb.js b/api/js/api/application_pb.js
index b34b9b89..977cf9f0 100644
--- a/api/js/api/application_pb.js
+++ b/api/js/api/application_pb.js
@@ -13195,7 +13195,9 @@ proto.api.IftttIntegration.toObject = function(includeInstance, msg) {
var f, obj = {
applicationId: jspb.Message.getFieldWithDefault(msg, 1, ""),
key: jspb.Message.getFieldWithDefault(msg, 2, ""),
- uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f
+ uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f,
+ arbitraryJson: jspb.Message.getBooleanFieldWithDefault(msg, 4, false),
+ eventPrefix: jspb.Message.getFieldWithDefault(msg, 5, "")
};
if (includeInstance) {
@@ -13244,6 +13246,14 @@ proto.api.IftttIntegration.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {string} */ (reader.readString());
msg.addUplinkValues(value);
break;
+ case 4:
+ var value = /** @type {boolean} */ (reader.readBool());
+ msg.setArbitraryJson(value);
+ break;
+ case 5:
+ var value = /** @type {string} */ (reader.readString());
+ msg.setEventPrefix(value);
+ break;
default:
reader.skipField();
break;
@@ -13294,6 +13304,20 @@ proto.api.IftttIntegration.serializeBinaryToWriter = function(message, writer) {
f
);
}
+ f = message.getArbitraryJson();
+ if (f) {
+ writer.writeBool(
+ 4,
+ f
+ );
+ }
+ f = message.getEventPrefix();
+ if (f.length > 0) {
+ writer.writeString(
+ 5,
+ f
+ );
+ }
};
@@ -13370,6 +13394,42 @@ proto.api.IftttIntegration.prototype.clearUplinkValuesList = function() {
};
+/**
+ * optional bool arbitrary_json = 4;
+ * @return {boolean}
+ */
+proto.api.IftttIntegration.prototype.getArbitraryJson = function() {
+ return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
+};
+
+
+/**
+ * @param {boolean} value
+ * @return {!proto.api.IftttIntegration} returns this
+ */
+proto.api.IftttIntegration.prototype.setArbitraryJson = function(value) {
+ return jspb.Message.setProto3BooleanField(this, 4, value);
+};
+
+
+/**
+ * optional string event_prefix = 5;
+ * @return {string}
+ */
+proto.api.IftttIntegration.prototype.getEventPrefix = function() {
+ return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.api.IftttIntegration} returns this
+ */
+proto.api.IftttIntegration.prototype.setEventPrefix = function(value) {
+ return jspb.Message.setProto3StringField(this, 5, value);
+};
+
+
diff --git a/api/md/api/api.md b/api/md/api/api.md
index eaabb2fb..bf73e334 100644
--- a/api/md/api/api.md
+++ b/api/md/api/api.md
@@ -1108,7 +1108,9 @@
| key | [string](#string) | | Key. This key can be obtained from the IFTTT Webhooks documentation page. |
| uplink_values | [string](#string) | repeated | Values. Up to 2 values can be forwarded to IFTTT. These values must map to the decoded payload keys. For example: { "batteryLevel": 75.3, "buttons": [{"pressed": false}, {"pressed": true}] } You would specify the following fields: uplink_values = ["batteryLevel", "buttons_0_pressed"]
-Note: The first value is always used for the DevEUI. |
+Notes: The first value is always used for the DevEUI. Ignored if arbitrary_json is set to true. |
+| arbitrary_json | [bool](#bool) | | Arbitrary JSON. If set to true, ChirpStack events will be sent as-is as arbitrary JSON payload. If set to false (default), the 3 JSON values format will be used. |
+| event_prefix | [string](#string) | | Event prefix. If set, the event name will be PREFIX_EVENT. For example if event_prefix is set to weatherstation, and uplink event will be sent as weatherstation_up to the IFTTT webhook. Note: Only characters in the A-Z, a-z and 0-9 range are allowed. |
@@ -1549,7 +1551,8 @@ Note: The first value is always used for the DevEUI. |
### ApplicationService
-ApplicationService is the service providing API methods for managing applications.
+ApplicationService is the service providing API methods for managing
+applications.
| Method Name | Request Type | Response Type | Description |
| ----------- | ------------ | ------------- | ------------|
diff --git a/api/proto/api/application.proto b/api/proto/api/application.proto
index 2055ce09..c0c98cc5 100644
--- a/api/proto/api/application.proto
+++ b/api/proto/api/application.proto
@@ -12,1006 +12,1081 @@ import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
-// ApplicationService is the service providing API methods for managing applications.
+// ApplicationService is the service providing API methods for managing
+// applications.
service ApplicationService {
- // Create creates the given application.
- rpc Create(CreateApplicationRequest) returns (CreateApplicationResponse) {
- option(google.api.http) = {
- post: "/api/applications"
- body: "*"
- };
- }
+ // Create creates the given application.
+ rpc Create(CreateApplicationRequest) returns (CreateApplicationResponse) {
+ option (google.api.http) = {
+ post : "/api/applications"
+ body : "*"
+ };
+ }
- // Get the application for the given ID.
- rpc Get(GetApplicationRequest) returns (GetApplicationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{id}"
- };
- }
+ // Get the application for the given ID.
+ rpc Get(GetApplicationRequest) returns (GetApplicationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{id}"
+ };
+ }
- // Update updates the given application.
- rpc Update(UpdateApplicationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{application.id}"
- body: "*"
- };
- }
+ // Update updates the given application.
+ rpc Update(UpdateApplicationRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{application.id}"
+ body : "*"
+ };
+ }
- // Delete the application for the given ID.
- rpc Delete(DeleteApplicationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{id}"
- };
- }
+ // Delete the application for the given ID.
+ rpc Delete(DeleteApplicationRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{id}"
+ };
+ }
- // Get the list of applications.
- rpc List(ListApplicationsRequest) returns (ListApplicationsResponse) {
- option(google.api.http) = {
- get: "/api/applications"
- };
- }
+ // Get the list of applications.
+ rpc List(ListApplicationsRequest) returns (ListApplicationsResponse) {
+ option (google.api.http) = {
+ get : "/api/applications"
+ };
+ }
- // List all configured integrations.
- rpc ListIntegrations(ListIntegrationsRequest) returns (ListIntegrationsResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations"
- };
- }
+ // List all configured integrations.
+ rpc ListIntegrations(ListIntegrationsRequest)
+ returns (ListIntegrationsResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations"
+ };
+ }
- // Create HTTP integration.
- rpc CreateHttpIntegration(CreateHttpIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/http"
- body: "*"
- };
- }
+ // Create HTTP integration.
+ rpc CreateHttpIntegration(CreateHttpIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/http"
+ body : "*"
+ };
+ }
- // Get the configured HTTP integration.
- rpc GetHttpIntegration(GetHttpIntegrationRequest) returns (GetHttpIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/http"
- };
- }
+ // Get the configured HTTP integration.
+ rpc GetHttpIntegration(GetHttpIntegrationRequest)
+ returns (GetHttpIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/http"
+ };
+ }
- // Update the HTTP integration.
- rpc UpdateHttpIntegration(UpdateHttpIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/http"
- body: "*"
- };
- }
+ // Update the HTTP integration.
+ rpc UpdateHttpIntegration(UpdateHttpIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/http"
+ body : "*"
+ };
+ }
- // Delete the HTTP integration.
- rpc DeleteHttpIntegration(DeleteHttpIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/http"
- };
- }
+ // Delete the HTTP integration.
+ rpc DeleteHttpIntegration(DeleteHttpIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/http"
+ };
+ }
- // Create InfluxDb integration.
- rpc CreateInfluxDbIntegration(CreateInfluxDbIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/influxdb"
- body: "*"
- };
- }
+ // Create InfluxDb integration.
+ rpc CreateInfluxDbIntegration(CreateInfluxDbIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "influxdb"
+ body : "*"
+ };
+ }
- // Get InfluxDb integration.
- rpc GetInfluxDbIntegration(GetInfluxDbIntegrationRequest) returns (GetInfluxDbIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/influxdb"
- };
- }
+ // Get InfluxDb integration.
+ rpc GetInfluxDbIntegration(GetInfluxDbIntegrationRequest)
+ returns (GetInfluxDbIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/influxdb"
+ };
+ }
- // Update InfluxDb integration.
- rpc UpdateInfluxDbIntegration(UpdateInfluxDbIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/influxdb"
- body: "*"
- };
- }
+ // Update InfluxDb integration.
+ rpc UpdateInfluxDbIntegration(UpdateInfluxDbIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "influxdb"
+ body : "*"
+ };
+ }
- // Delete InfluxDb integration.
- rpc DeleteInfluxDbIntegration(DeleteInfluxDbIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/influxdb"
- };
- }
+ // Delete InfluxDb integration.
+ rpc DeleteInfluxDbIntegration(DeleteInfluxDbIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/influxdb"
+ };
+ }
- // Create ThingsBoard integration.
- rpc CreateThingsBoardIntegration(CreateThingsBoardIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/thingsboard"
- body: "*"
- };
- }
+ // Create ThingsBoard integration.
+ rpc CreateThingsBoardIntegration(CreateThingsBoardIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "thingsboard"
+ body : "*"
+ };
+ }
- // Get ThingsBoard integration.
- rpc GetThingsBoardIntegration(GetThingsBoardIntegrationRequest) returns (GetThingsBoardIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/thingsboard"
- };
- }
+ // Get ThingsBoard integration.
+ rpc GetThingsBoardIntegration(GetThingsBoardIntegrationRequest)
+ returns (GetThingsBoardIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/thingsboard"
+ };
+ }
- // Update ThingsBoard integration.
- rpc UpdateThingsBoardIntegration(UpdateThingsBoardIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/thingsboard"
- body: "*"
- };
- }
+ // Update ThingsBoard integration.
+ rpc UpdateThingsBoardIntegration(UpdateThingsBoardIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "thingsboard"
+ body : "*"
+ };
+ }
- // Delete ThingsBoard integration.
- rpc DeleteThingsBoardIntegration(DeleteThingsBoardIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/thingsboard"
- };
- }
+ // Delete ThingsBoard integration.
+ rpc DeleteThingsBoardIntegration(DeleteThingsBoardIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/thingsboard"
+ };
+ }
- // Create myDevices integration.
- rpc CreateMyDevicesIntegration(CreateMyDevicesIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/mydevices"
- body: "*"
- };
- }
+ // Create myDevices integration.
+ rpc CreateMyDevicesIntegration(CreateMyDevicesIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "mydevices"
+ body : "*"
+ };
+ }
- // Get myDevices integration.
- rpc GetMyDevicesIntegration(GetMyDevicesIntegrationRequest) returns (GetMyDevicesIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/mydevices"
- };
- }
+ // Get myDevices integration.
+ rpc GetMyDevicesIntegration(GetMyDevicesIntegrationRequest)
+ returns (GetMyDevicesIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/mydevices"
+ };
+ }
- // Update myDevices integration.
- rpc UpdateMyDevicesIntegration(UpdateMyDevicesIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/mydevices"
- body: "*"
- };
- }
+ // Update myDevices integration.
+ rpc UpdateMyDevicesIntegration(UpdateMyDevicesIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "mydevices"
+ body : "*"
+ };
+ }
- // Delete myDevices integration.
- rpc DeleteMyDevicesIntegration(DeleteMyDevicesIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/mydevices"
- };
- }
+ // Delete myDevices integration.
+ rpc DeleteMyDevicesIntegration(DeleteMyDevicesIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/mydevices"
+ };
+ }
- // Create LoRaCloud integration.
- rpc CreateLoraCloudIntegration(CreateLoraCloudIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/loracloud"
- body: "*"
- };
- }
+ // Create LoRaCloud integration.
+ rpc CreateLoraCloudIntegration(CreateLoraCloudIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "loracloud"
+ body : "*"
+ };
+ }
- // Get LoRaCloud integration.
- rpc GetLoraCloudIntegration(GetLoraCloudIntegrationRequest) returns (GetLoraCloudIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/loracloud"
- };
- }
+ // Get LoRaCloud integration.
+ rpc GetLoraCloudIntegration(GetLoraCloudIntegrationRequest)
+ returns (GetLoraCloudIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/loracloud"
+ };
+ }
- // Update LoRaCloud integration.
- rpc UpdateLoraCloudIntegration(UpdateLoraCloudIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/loracloud"
- body: "*"
- };
- }
+ // Update LoRaCloud integration.
+ rpc UpdateLoraCloudIntegration(UpdateLoraCloudIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "loracloud"
+ body : "*"
+ };
+ }
- // Delete LoRaCloud integration.
- rpc DeleteLoraCloudIntegration(DeleteLoraCloudIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/loracloud"
- };
- }
+ // Delete LoRaCloud integration.
+ rpc DeleteLoraCloudIntegration(DeleteLoraCloudIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/loracloud"
+ };
+ }
- // Create GCP Pub/Sub integration.
- rpc CreateGcpPubSubIntegration(CreateGcpPubSubIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/gcp-pub-sub"
- body: "*"
- };
- }
+ // Create GCP Pub/Sub integration.
+ rpc CreateGcpPubSubIntegration(CreateGcpPubSubIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "gcp-pub-sub"
+ body : "*"
+ };
+ }
- // Get GCP Pub/Sub integration.
- rpc GetGcpPubSubIntegration(GetGcpPubSubIntegrationRequest) returns (GetGcpPubSubIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/gcp-pub-sub"
- };
- }
+ // Get GCP Pub/Sub integration.
+ rpc GetGcpPubSubIntegration(GetGcpPubSubIntegrationRequest)
+ returns (GetGcpPubSubIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/gcp-pub-sub"
+ };
+ }
- // Update GCP Pub/Sub integration.
- rpc UpdateGcpPubSubIntegration(UpdateGcpPubSubIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/gcp-pub-sub"
- body: "*"
- };
- }
+ // Update GCP Pub/Sub integration.
+ rpc UpdateGcpPubSubIntegration(UpdateGcpPubSubIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "gcp-pub-sub"
+ body : "*"
+ };
+ }
- // Delete GCP Pub/Sub integration.
- rpc DeleteGcpPubSubIntegration(DeleteGcpPubSubIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/gcp-pub-sub"
- };
- }
+ // Delete GCP Pub/Sub integration.
+ rpc DeleteGcpPubSubIntegration(DeleteGcpPubSubIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/gcp-pub-sub"
+ };
+ }
- // Create AWS SNS integration.
- rpc CreateAwsSnsIntegration(CreateAwsSnsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/aws-sns"
- body: "*"
- };
- }
+ // Create AWS SNS integration.
+ rpc CreateAwsSnsIntegration(CreateAwsSnsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "aws-sns"
+ body : "*"
+ };
+ }
- // Get AWS SNS integration.
- rpc GetAwsSnsIntegration(GetAwsSnsIntegrationRequest) returns (GetAwsSnsIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/aws-sns"
- };
- }
+ // Get AWS SNS integration.
+ rpc GetAwsSnsIntegration(GetAwsSnsIntegrationRequest)
+ returns (GetAwsSnsIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/aws-sns"
+ };
+ }
- // Update AWS SNS integration.
- rpc UpdateAwsSnsIntegration(UpdateAwsSnsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/aws-sns"
- body: "*"
- };
- }
+ // Update AWS SNS integration.
+ rpc UpdateAwsSnsIntegration(UpdateAwsSnsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "aws-sns"
+ body : "*"
+ };
+ }
- // Delete AWS SNS integration.
- rpc DeleteAwsSnsIntegration(DeleteAwsSnsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/aws-sns"
- };
- }
+ // Delete AWS SNS integration.
+ rpc DeleteAwsSnsIntegration(DeleteAwsSnsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/aws-sns"
+ };
+ }
- // Create Azure Service-Bus integration.
- rpc CreateAzureServiceBusIntegration(CreateAzureServiceBusIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/azure-service-bus"
- body: "*"
- };
- }
+ // Create Azure Service-Bus integration.
+ rpc CreateAzureServiceBusIntegration(CreateAzureServiceBusIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "azure-service-bus"
+ body : "*"
+ };
+ }
- // Get Azure Service-Bus integration.
- rpc GetAzureServiceBusIntegration(GetAzureServiceBusIntegrationRequest) returns (GetAzureServiceBusIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/azure-service-bus"
- };
- }
+ // Get Azure Service-Bus integration.
+ rpc GetAzureServiceBusIntegration(GetAzureServiceBusIntegrationRequest)
+ returns (GetAzureServiceBusIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/azure-service-bus"
+ };
+ }
- // Update Azure Service-Bus integration.
- rpc UpdateAzureServiceBusIntegration(UpdateAzureServiceBusIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/azure-service-bus"
- body: "*"
- };
- }
+ // Update Azure Service-Bus integration.
+ rpc UpdateAzureServiceBusIntegration(UpdateAzureServiceBusIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "azure-service-bus"
+ body : "*"
+ };
+ }
- // Delete Azure Service-Bus integration.
- rpc DeleteAzureServiceBusIntegration(DeleteAzureServiceBusIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/azure-service-bus"
- };
- }
+ // Delete Azure Service-Bus integration.
+ rpc DeleteAzureServiceBusIntegration(DeleteAzureServiceBusIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/"
+ "azure-service-bus"
+ };
+ }
- // Create Pilot Things integration.
- rpc CreatePilotThingsIntegration(CreatePilotThingsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/pilot-things"
- body: "*"
- };
- }
+ // Create Pilot Things integration.
+ rpc CreatePilotThingsIntegration(CreatePilotThingsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "pilot-things"
+ body : "*"
+ };
+ }
- // Get Pilot Things integration.
- rpc GetPilotThingsIntegration(GetPilotThingsIntegrationRequest) returns (GetPilotThingsIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/pilot-things"
- };
- }
+ // Get Pilot Things integration.
+ rpc GetPilotThingsIntegration(GetPilotThingsIntegrationRequest)
+ returns (GetPilotThingsIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/pilot-things"
+ };
+ }
- // Update Pilot Things integration.
- rpc UpdatePilotThingsIntegration(UpdatePilotThingsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/pilot-things"
- body: "*"
- };
- }
+ // Update Pilot Things integration.
+ rpc UpdatePilotThingsIntegration(UpdatePilotThingsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "pilot-things"
+ body : "*"
+ };
+ }
- // Delete Pilot Things integration.
- rpc DeletePilotThingsIntegration(DeletePilotThingsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/pilot-things"
- };
- }
+ // Delete Pilot Things integration.
+ rpc DeletePilotThingsIntegration(DeletePilotThingsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/pilot-things"
+ };
+ }
- // Create IFTTT integration.
- rpc CreateIftttIntegration(CreateIftttIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/ifttt"
- body: "*"
- };
- }
+ // Create IFTTT integration.
+ rpc CreateIftttIntegration(CreateIftttIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/ifttt"
+ body : "*"
+ };
+ }
- // Get IFTTT integration.
- rpc GetIftttIntegration(GetIftttIntegrationRequest) returns (GetIftttIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/ifttt"
- };
- }
+ // Get IFTTT integration.
+ rpc GetIftttIntegration(GetIftttIntegrationRequest)
+ returns (GetIftttIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/ifttt"
+ };
+ }
- // Update IFTTT integration.
- rpc UpdateIftttIntegration(UpdateIftttIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/ifttt"
- body: "*"
- };
- }
+ // Update IFTTT integration.
+ rpc UpdateIftttIntegration(UpdateIftttIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/ifttt"
+ body : "*"
+ };
+ }
- // Delete IFTTT integration.
- rpc DeleteIftttIntegration(DeleteIftttIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/ifttt"
- };
- }
+ // Delete IFTTT integration.
+ rpc DeleteIftttIntegration(DeleteIftttIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/ifttt"
+ };
+ }
- // Generates application ID specific client-certificate.
- rpc GenerateMqttIntegrationClientCertificate(GenerateMqttIntegrationClientCertificateRequest) returns (GenerateMqttIntegrationClientCertificateResponse) {
- option(google.api.http) = {
- post: "/api/applications/{application_id}/integrations/mqtt/certificate"
- };
- }
+ // Generates application ID specific client-certificate.
+ rpc GenerateMqttIntegrationClientCertificate(
+ GenerateMqttIntegrationClientCertificateRequest)
+ returns (GenerateMqttIntegrationClientCertificateResponse) {
+ option (google.api.http) = {
+ post : "/api/applications/{application_id}/integrations/mqtt/certificate"
+ };
+ }
}
enum Encoding {
- JSON = 0;
- PROTOBUF = 1;
+ JSON = 0;
+ PROTOBUF = 1;
}
enum IntegrationKind {
- HTTP = 0;
- INFLUX_DB = 1;
- THINGS_BOARD = 2;
- MY_DEVICES = 3;
- LORA_CLOUD = 4;
- GCP_PUB_SUB = 5;
- AWS_SNS = 6;
- AZURE_SERVICE_BUS = 7;
- PILOT_THINGS = 8;
- MQTT_GLOBAL = 9;
- IFTTT = 10;
+ HTTP = 0;
+ INFLUX_DB = 1;
+ THINGS_BOARD = 2;
+ MY_DEVICES = 3;
+ LORA_CLOUD = 4;
+ GCP_PUB_SUB = 5;
+ AWS_SNS = 6;
+ AZURE_SERVICE_BUS = 7;
+ PILOT_THINGS = 8;
+ MQTT_GLOBAL = 9;
+ IFTTT = 10;
}
message Application {
- // Application ID (UUID).
- // Note: on create this will be automatically generated.
- string id = 1;
+ // Application ID (UUID).
+ // Note: on create this will be automatically generated.
+ string id = 1;
- // Application name.
- string name = 2;
+ // Application name.
+ string name = 2;
- // Application description.
- string description = 3;
+ // Application description.
+ string description = 3;
- // Tenant ID (UUID).
- string tenant_id = 4;
+ // Tenant ID (UUID).
+ string tenant_id = 4;
}
message ApplicationListItem {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
- // Created at timestamp.
- google.protobuf.Timestamp created_at = 2;
+ // Created at timestamp.
+ google.protobuf.Timestamp created_at = 2;
- // Last update timestamp.
- google.protobuf.Timestamp updated_at = 3;
+ // Last update timestamp.
+ google.protobuf.Timestamp updated_at = 3;
- // Application name.
- string name = 4;
-
- // Application description.
- string description = 5;
+ // Application name.
+ string name = 4;
+
+ // Application description.
+ string description = 5;
}
message CreateApplicationRequest {
- // Application object to create.
- Application application = 1;
+ // Application object to create.
+ Application application = 1;
}
message CreateApplicationResponse {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
}
message GetApplicationRequest {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
}
message GetApplicationResponse {
- // Application object.
- Application application = 1;
+ // Application object.
+ Application application = 1;
- // Created at timestamp.
- google.protobuf.Timestamp created_at = 2;
+ // Created at timestamp.
+ google.protobuf.Timestamp created_at = 2;
- // Last update timestamp.
- google.protobuf.Timestamp updated_at = 3;
+ // Last update timestamp.
+ google.protobuf.Timestamp updated_at = 3;
- // Measurement keys.
- // This contains the measurement keys from all the device-profiles that
- // are used by the devices under this application.
- repeated string measurement_keys = 4;
+ // Measurement keys.
+ // This contains the measurement keys from all the device-profiles that
+ // are used by the devices under this application.
+ repeated string measurement_keys = 4;
}
message UpdateApplicationRequest {
- // Application object.
- Application application = 1;
+ // Application object.
+ Application application = 1;
}
message DeleteApplicationRequest {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
}
message ListApplicationsRequest {
- // Max number of applications to return in the result-set.
- uint32 limit = 1;
+ // Max number of applications to return in the result-set.
+ uint32 limit = 1;
- // Offset in the result-set (for pagination).
- uint32 offset = 2;
+ // Offset in the result-set (for pagination).
+ uint32 offset = 2;
- // If set, the given string will be used to search on name (optional).
- string search = 3;
+ // If set, the given string will be used to search on name (optional).
+ string search = 3;
- // Tenant ID to list the applications for.
- string tenant_id = 4;
+ // Tenant ID to list the applications for.
+ string tenant_id = 4;
}
message ListApplicationsResponse {
- // Total number of applications.
- uint32 total_count = 1;
+ // Total number of applications.
+ uint32 total_count = 1;
- // Result-set.
- repeated ApplicationListItem result = 2;
+ // Result-set.
+ repeated ApplicationListItem result = 2;
}
message ListIntegrationsRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message IntegrationListItem {
- // Integration kind.
- IntegrationKind kind = 1;
+ // Integration kind.
+ IntegrationKind kind = 1;
}
message ListIntegrationsResponse {
- // Total number of integrations available within the result-set.
- uint32 total_count = 1;
+ // Total number of integrations available within the result-set.
+ uint32 total_count = 1;
- // Integrations within result-set.
- repeated IntegrationListItem result = 2;
+ // Integrations within result-set.
+ repeated IntegrationListItem result = 2;
}
message HttpIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // HTTP headers to set when making requests.
- map headers = 2;
+ // HTTP headers to set when making requests.
+ map headers = 2;
- // Payload encoding.
- Encoding encoding = 3;
+ // Payload encoding.
+ Encoding encoding = 3;
- // Event endpoint URL.
- // The HTTP integration will POST all events to this enpoint. The request
- // will contain a query parameters "event" containing the type of the
- // event.
- string event_endpoint_url = 4;
+ // Event endpoint URL.
+ // The HTTP integration will POST all events to this enpoint. The request
+ // will contain a query parameters "event" containing the type of the
+ // event.
+ string event_endpoint_url = 4;
}
message CreateHttpIntegrationRequest {
- // Integration object to create.
- HttpIntegration integration = 1;
+ // Integration object to create.
+ HttpIntegration integration = 1;
}
message GetHttpIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetHttpIntegrationResponse {
- // Integration object.
- HttpIntegration integration = 1;
+ // Integration object.
+ HttpIntegration integration = 1;
}
message UpdateHttpIntegrationRequest {
- // Integration object to update.
- HttpIntegration integration = 1;
+ // Integration object to update.
+ HttpIntegration integration = 1;
}
message DeleteHttpIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
enum InfluxDbPrecision {
- NS = 0;
- U = 1;
- MS = 2;
- S = 3;
- M = 4;
- H = 5;
+ NS = 0;
+ U = 1;
+ MS = 2;
+ S = 3;
+ M = 4;
+ H = 5;
}
enum InfluxDbVersion {
- INFLUXDB_1 = 0;
- INFLUXDB_2 = 1;
+ INFLUXDB_1 = 0;
+ INFLUXDB_2 = 1;
}
message InfluxDbIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // InfluxDb API write endpoint (e.g. http://localhost:8086/write).
- string endpoint = 2;
+ // InfluxDb API write endpoint (e.g. http://localhost:8086/write).
+ string endpoint = 2;
- // InfluxDb database name. (InfluxDb v1)
- string db = 3;
+ // InfluxDb database name. (InfluxDb v1)
+ string db = 3;
- // InfluxDb username. (InfluxDb v1)
- string username = 4;
+ // InfluxDb username. (InfluxDb v1)
+ string username = 4;
- // InfluxDb password. (InfluxDb v1)
- string password = 5;
+ // InfluxDb password. (InfluxDb v1)
+ string password = 5;
- // InfluxDb retention policy name. (InfluxDb v1)
- string retention_policy_name = 6;
+ // InfluxDb retention policy name. (InfluxDb v1)
+ string retention_policy_name = 6;
- // InfluxDb timestamp precision (InfluxDb v1).
- InfluxDbPrecision precision = 7;
+ // InfluxDb timestamp precision (InfluxDb v1).
+ InfluxDbPrecision precision = 7;
- // InfluxDb version.
- InfluxDbVersion version = 8;
+ // InfluxDb version.
+ InfluxDbVersion version = 8;
- // Token. (InfluxDb v2)
- string token = 9;
+ // Token. (InfluxDb v2)
+ string token = 9;
- // Organization. (InfluxDb v2)
- string organization = 10;
+ // Organization. (InfluxDb v2)
+ string organization = 10;
- // Bucket. (InfluxDb v2)
- string bucket = 11;
+ // Bucket. (InfluxDb v2)
+ string bucket = 11;
}
message CreateInfluxDbIntegrationRequest {
- // Integration object to create.
- InfluxDbIntegration integration = 1;
+ // Integration object to create.
+ InfluxDbIntegration integration = 1;
}
message GetInfluxDbIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetInfluxDbIntegrationResponse {
- // Integration object.
- InfluxDbIntegration integration = 1;
+ // Integration object.
+ InfluxDbIntegration integration = 1;
}
message UpdateInfluxDbIntegrationRequest {
- // Integration object to update.
- InfluxDbIntegration integration = 1;
+ // Integration object to update.
+ InfluxDbIntegration integration = 1;
}
message DeleteInfluxDbIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message ThingsBoardIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // ThingsBoard server endpoint, e.g. https://example.com
- string server = 2;
+ // ThingsBoard server endpoint, e.g. https://example.com
+ string server = 2;
}
message CreateThingsBoardIntegrationRequest {
- // Integration object to create.
- ThingsBoardIntegration integration = 1;
+ // Integration object to create.
+ ThingsBoardIntegration integration = 1;
}
message GetThingsBoardIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetThingsBoardIntegrationResponse {
- // Integration object.
- ThingsBoardIntegration integration = 1;
+ // Integration object.
+ ThingsBoardIntegration integration = 1;
}
message UpdateThingsBoardIntegrationRequest {
- // Integration object to update.
- ThingsBoardIntegration integration = 1;
+ // Integration object to update.
+ ThingsBoardIntegration integration = 1;
}
message DeleteThingsBoardIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message MyDevicesIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // myDevices API endpoint.
- string endpoint = 2;
+ // myDevices API endpoint.
+ string endpoint = 2;
}
message CreateMyDevicesIntegrationRequest {
- // Integration object to create.
- MyDevicesIntegration integration = 1;
+ // Integration object to create.
+ MyDevicesIntegration integration = 1;
}
message GetMyDevicesIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetMyDevicesIntegrationResponse {
- // Integration object.
- MyDevicesIntegration integration = 1;
+ // Integration object.
+ MyDevicesIntegration integration = 1;
}
message UpdateMyDevicesIntegrationRequest {
- // Integration object to update.
- MyDevicesIntegration integration = 1;
+ // Integration object to update.
+ MyDevicesIntegration integration = 1;
}
message DeleteMyDevicesIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message LoraCloudIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Modem & Geolocation Services configuration.
- LoraCloudModemGeolocationServices modem_geolocation_services = 2;
+ // Modem & Geolocation Services configuration.
+ LoraCloudModemGeolocationServices modem_geolocation_services = 2;
}
message LoraCloudModemGeolocationServices {
- // API token.
- string token = 1;
+ // API token.
+ string token = 1;
- // Device implements Modem / Modem-E stack.
- bool modem_enabled = 2;
+ // Device implements Modem / Modem-E stack.
+ bool modem_enabled = 2;
- // Forward FPorts.
- // Forward uplink messages matching the given FPorts to the MGS.
- repeated uint32 forward_f_ports = 16;
+ // Forward FPorts.
+ // Forward uplink messages matching the given FPorts to the MGS.
+ repeated uint32 forward_f_ports = 16;
- // Use rx time for GNSS resolving.
- // In case this is set to true, the MGS resolver will use the RX time of the
- // network instead of the timestamp included in the LR1110 payload.
- bool gnss_use_rx_time = 5;
+ // Use rx time for GNSS resolving.
+ // In case this is set to true, the MGS resolver will use the RX time of the
+ // network instead of the timestamp included in the LR1110 payload.
+ bool gnss_use_rx_time = 5;
- // Use gateway location for GNSS resolving.
- // In the case this is set to true, ChirpStack will provide the location of
- // one of the gateways to the MGS resolver to aid the resolving process.
- // Disable this in case the gateway location is not accurate / incorrectly
- // configured as an incorrect location will cause the resolver to return an
- // error.
- bool gnss_use_gateway_location = 17;
+ // Use gateway location for GNSS resolving.
+ // In the case this is set to true, ChirpStack will provide the location of
+ // one of the gateways to the MGS resolver to aid the resolving process.
+ // Disable this in case the gateway location is not accurate / incorrectly
+ // configured as an incorrect location will cause the resolver to return an
+ // error.
+ bool gnss_use_gateway_location = 17;
- // Parse TLV records.
- // If enabled, stream records (expected in TLV format) are scanned for GNSS
- // data (0x06 or 0x07). If found, ChirpStack will make an additional
- // geolocation call to the MGS API for resolving the location of the detected
- // payload.
- bool parse_tlv = 6;
+ // Parse TLV records.
+ // If enabled, stream records (expected in TLV format) are scanned for GNSS
+ // data (0x06 or 0x07). If found, ChirpStack will make an additional
+ // geolocation call to the MGS API for resolving the location of the detected
+ // payload.
+ bool parse_tlv = 6;
- // Geolocation buffer TTL (in seconds).
- // If > 0, uplink RX meta-data will be stored in a buffer so that
- // the meta-data of multiple uplinks can be used for geolocation.
- uint32 geolocation_buffer_ttl = 7;
+ // Geolocation buffer TTL (in seconds).
+ // If > 0, uplink RX meta-data will be stored in a buffer so that
+ // the meta-data of multiple uplinks can be used for geolocation.
+ uint32 geolocation_buffer_ttl = 7;
- // Geolocation minimum buffer size.
- // If > 0, geolocation will only be performed when the buffer has
- // at least the given size.
- uint32 geolocation_min_buffer_size = 8;
+ // Geolocation minimum buffer size.
+ // If > 0, geolocation will only be performed when the buffer has
+ // at least the given size.
+ uint32 geolocation_min_buffer_size = 8;
- // TDOA based geolocation is enabled.
- bool geolocation_tdoa = 9;
+ // TDOA based geolocation is enabled.
+ bool geolocation_tdoa = 9;
- // RSSI based geolocation is enabled.
- bool geolocation_rssi = 10;
+ // RSSI based geolocation is enabled.
+ bool geolocation_rssi = 10;
- // GNSS based geolocation is enabled (LR1110).
- bool geolocation_gnss = 11;
+ // GNSS based geolocation is enabled (LR1110).
+ bool geolocation_gnss = 11;
- // GNSS payload field.
- // This holds the name of the field in the decoded payload object which
- // contains the GNSS payload bytes (as HEX string).
- string geolocation_gnss_payload_field = 12;
+ // GNSS payload field.
+ // This holds the name of the field in the decoded payload object which
+ // contains the GNSS payload bytes (as HEX string).
+ string geolocation_gnss_payload_field = 12;
- // GNSS use RX time.
- // In case this is set to true, the resolver will use the RX time of the
- // network instead of the timestamp included in the LR1110 payload.
- bool geolocation_gnss_use_rx_time = 13;
+ // GNSS use RX time.
+ // In case this is set to true, the resolver will use the RX time of the
+ // network instead of the timestamp included in the LR1110 payload.
+ bool geolocation_gnss_use_rx_time = 13;
- // Wifi based geolocation is enabled.
- bool geolocation_wifi = 14;
+ // Wifi based geolocation is enabled.
+ bool geolocation_wifi = 14;
- // Wifi payload field.
- // This holds the name of the field in the decoded payload object which
- // contains an array of objects with the following fields:
- // * macAddress - e.g. 01:23:45:67:89:ab
- // * signalStrength - e.g. -51 (optional)
- string geolocation_wifi_payload_field = 15;
+ // Wifi payload field.
+ // This holds the name of the field in the decoded payload object which
+ // contains an array of objects with the following fields:
+ // * macAddress - e.g. 01:23:45:67:89:ab
+ // * signalStrength - e.g. -51 (optional)
+ string geolocation_wifi_payload_field = 15;
}
message CreateLoraCloudIntegrationRequest {
- // Integration object to create.
- LoraCloudIntegration integration = 1;
+ // Integration object to create.
+ LoraCloudIntegration integration = 1;
}
message GetLoraCloudIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetLoraCloudIntegrationResponse {
- // Integration object.
- LoraCloudIntegration integration = 1;
+ // Integration object.
+ LoraCloudIntegration integration = 1;
}
message UpdateLoraCloudIntegrationRequest {
- // Integration object to update.
- LoraCloudIntegration integration = 1;
+ // Integration object to update.
+ LoraCloudIntegration integration = 1;
}
message DeleteLoraCloudIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GcpPubSubIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Encoding.
- Encoding encoding = 2;
+ // Encoding.
+ Encoding encoding = 2;
- // Credentials file.
- // This IAM service-account credentials file (JSON) must have the following Pub/Sub roles:
- // * Pub/Sub Publisher
- string credentials_file = 3;
+ // Credentials file.
+ // This IAM service-account credentials file (JSON) must have the following
+ // Pub/Sub roles:
+ // * Pub/Sub Publisher
+ string credentials_file = 3;
- // Project ID.
- string project_id = 4;
+ // Project ID.
+ string project_id = 4;
- // Topic name.
- // This is the name of the Pub/Sub topic.
- string topic_name = 5;
+ // Topic name.
+ // This is the name of the Pub/Sub topic.
+ string topic_name = 5;
}
message CreateGcpPubSubIntegrationRequest {
- // Integration object to create.
- GcpPubSubIntegration integration = 1;
+ // Integration object to create.
+ GcpPubSubIntegration integration = 1;
}
message GetGcpPubSubIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetGcpPubSubIntegrationResponse {
- // Integration object.
- GcpPubSubIntegration integration = 1;
+ // Integration object.
+ GcpPubSubIntegration integration = 1;
}
message UpdateGcpPubSubIntegrationRequest {
- // Integration object to update.
- GcpPubSubIntegration integration = 1;
+ // Integration object to update.
+ GcpPubSubIntegration integration = 1;
}
message DeleteGcpPubSubIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message AwsSnsIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Encoding.
- Encoding encoding = 2;
+ // Encoding.
+ Encoding encoding = 2;
- // AWS region.
- string region = 3;
+ // AWS region.
+ string region = 3;
- // AWS Access Key ID.
- string access_key_id = 4;
+ // AWS Access Key ID.
+ string access_key_id = 4;
- // AWS Secret Access Key.
- string secret_access_key = 5;
+ // AWS Secret Access Key.
+ string secret_access_key = 5;
- // Topic ARN.
- string topic_arn = 6;
+ // Topic ARN.
+ string topic_arn = 6;
}
message CreateAwsSnsIntegrationRequest {
- // Integration object to create.
- AwsSnsIntegration integration = 1;
+ // Integration object to create.
+ AwsSnsIntegration integration = 1;
}
message GetAwsSnsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetAwsSnsIntegrationResponse {
- // Integration object.
- AwsSnsIntegration integration = 1;
+ // Integration object.
+ AwsSnsIntegration integration = 1;
}
message UpdateAwsSnsIntegrationRequest {
- // Integration object to update.
- AwsSnsIntegration integration = 1;
+ // Integration object to update.
+ AwsSnsIntegration integration = 1;
}
message DeleteAwsSnsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message AzureServiceBusIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Encoding.
- Encoding encoding = 2;
+ // Encoding.
+ Encoding encoding = 2;
- // Connection string.
- string connection_string = 3;
+ // Connection string.
+ string connection_string = 3;
- // Publish name.
- // This is the name of the topic or queue.
- string publish_name = 4;
+ // Publish name.
+ // This is the name of the topic or queue.
+ string publish_name = 4;
}
message CreateAzureServiceBusIntegrationRequest {
- // Integration object to create.
- AzureServiceBusIntegration integration = 1;
+ // Integration object to create.
+ AzureServiceBusIntegration integration = 1;
}
message GetAzureServiceBusIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetAzureServiceBusIntegrationResponse {
- // Integration object.
- AzureServiceBusIntegration integration = 1;
+ // Integration object.
+ AzureServiceBusIntegration integration = 1;
}
message UpdateAzureServiceBusIntegrationRequest {
- // Integration object to create.
- AzureServiceBusIntegration integration = 1;
+ // Integration object to create.
+ AzureServiceBusIntegration integration = 1;
}
message DeleteAzureServiceBusIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message PilotThingsIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Server URL.
- string server = 2;
+ // Server URL.
+ string server = 2;
- // Authentication token.
- string token = 3;
+ // Authentication token.
+ string token = 3;
}
message CreatePilotThingsIntegrationRequest {
- // Integration object to create.
- PilotThingsIntegration integration = 1;
+ // Integration object to create.
+ PilotThingsIntegration integration = 1;
}
message GetPilotThingsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetPilotThingsIntegrationResponse {
- // Integration object.
- PilotThingsIntegration integration = 1;
+ // Integration object.
+ PilotThingsIntegration integration = 1;
}
message UpdatePilotThingsIntegrationRequest {
- // Integration object to update.
- PilotThingsIntegration integration = 1;
+ // Integration object to update.
+ PilotThingsIntegration integration = 1;
}
message DeletePilotThingsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message IftttIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Key.
- // This key can be obtained from the IFTTT Webhooks documentation page.
- string key = 2;
+ // Key.
+ // This key can be obtained from the IFTTT Webhooks documentation page.
+ string key = 2;
- // Values.
- // Up to 2 values can be forwarded to IFTTT. These values must map to the
- // decoded payload keys. For example:
- // {
- // "batteryLevel": 75.3,
- // "buttons": [{"pressed": false}, {"pressed": true}]
- // }
- // You would specify the following fields:
- // uplink_values = ["batteryLevel", "buttons_0_pressed"]
- //
- // Note: The first value is always used for the DevEUI.
- repeated string uplink_values = 3;
+ // Values.
+ // Up to 2 values can be forwarded to IFTTT. These values must map to the
+ // decoded payload keys. For example:
+ // {
+ // "batteryLevel": 75.3,
+ // "buttons": [{"pressed": false}, {"pressed": true}]
+ // }
+ // You would specify the following fields:
+ // uplink_values = ["batteryLevel", "buttons_0_pressed"]
+ //
+ // Notes: The first value is always used for the DevEUI.
+ // Ignored if arbitrary_json is set to true.
+ repeated string uplink_values = 3;
+
+ // Arbitrary JSON.
+ // If set to true, ChirpStack events will be sent as-is as arbitrary JSON
+ // payload. If set to false (default), the 3 JSON values format will be used.
+ bool arbitrary_json = 4;
+
+ // Event prefix.
+ // If set, the event name will be PREFIX_EVENT. For example if event_prefix
+ // is set to weatherstation, and uplink event will be sent as
+ // weatherstation_up to the IFTTT webhook.
+ // Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
+ string event_prefix = 5;
}
message CreateIftttIntegrationRequest {
- // Integration object.
- IftttIntegration integration = 1;
+ // Integration object.
+ IftttIntegration integration = 1;
}
message GetIftttIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetIftttIntegrationResponse {
- // Integration object.
- IftttIntegration integration = 1;
+ // Integration object.
+ IftttIntegration integration = 1;
}
message UpdateIftttIntegrationRequest {
- // Integration object to update.
- IftttIntegration integration = 1;
+ // Integration object to update.
+ IftttIntegration integration = 1;
}
message DeleteIftttIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GenerateMqttIntegrationClientCertificateRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GenerateMqttIntegrationClientCertificateResponse {
- // TLS certificate.
- string tls_cert = 1;
+ // TLS certificate.
+ string tls_cert = 1;
- // TLS key.
- string tls_key = 2;
+ // TLS key.
+ string tls_key = 2;
- // CA certificate.
- string ca_cert = 3;
+ // CA certificate.
+ string ca_cert = 3;
- // Expires at defines the expiration date of the certificate.
- google.protobuf.Timestamp expires_at = 4;
+ // Expires at defines the expiration date of the certificate.
+ google.protobuf.Timestamp expires_at = 4;
}
diff --git a/api/python/proto/chirpstack-api/api/application.proto b/api/python/proto/chirpstack-api/api/application.proto
index 2055ce09..c0c98cc5 100644
--- a/api/python/proto/chirpstack-api/api/application.proto
+++ b/api/python/proto/chirpstack-api/api/application.proto
@@ -12,1006 +12,1081 @@ import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
-// ApplicationService is the service providing API methods for managing applications.
+// ApplicationService is the service providing API methods for managing
+// applications.
service ApplicationService {
- // Create creates the given application.
- rpc Create(CreateApplicationRequest) returns (CreateApplicationResponse) {
- option(google.api.http) = {
- post: "/api/applications"
- body: "*"
- };
- }
+ // Create creates the given application.
+ rpc Create(CreateApplicationRequest) returns (CreateApplicationResponse) {
+ option (google.api.http) = {
+ post : "/api/applications"
+ body : "*"
+ };
+ }
- // Get the application for the given ID.
- rpc Get(GetApplicationRequest) returns (GetApplicationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{id}"
- };
- }
+ // Get the application for the given ID.
+ rpc Get(GetApplicationRequest) returns (GetApplicationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{id}"
+ };
+ }
- // Update updates the given application.
- rpc Update(UpdateApplicationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{application.id}"
- body: "*"
- };
- }
+ // Update updates the given application.
+ rpc Update(UpdateApplicationRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{application.id}"
+ body : "*"
+ };
+ }
- // Delete the application for the given ID.
- rpc Delete(DeleteApplicationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{id}"
- };
- }
+ // Delete the application for the given ID.
+ rpc Delete(DeleteApplicationRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{id}"
+ };
+ }
- // Get the list of applications.
- rpc List(ListApplicationsRequest) returns (ListApplicationsResponse) {
- option(google.api.http) = {
- get: "/api/applications"
- };
- }
+ // Get the list of applications.
+ rpc List(ListApplicationsRequest) returns (ListApplicationsResponse) {
+ option (google.api.http) = {
+ get : "/api/applications"
+ };
+ }
- // List all configured integrations.
- rpc ListIntegrations(ListIntegrationsRequest) returns (ListIntegrationsResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations"
- };
- }
+ // List all configured integrations.
+ rpc ListIntegrations(ListIntegrationsRequest)
+ returns (ListIntegrationsResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations"
+ };
+ }
- // Create HTTP integration.
- rpc CreateHttpIntegration(CreateHttpIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/http"
- body: "*"
- };
- }
+ // Create HTTP integration.
+ rpc CreateHttpIntegration(CreateHttpIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/http"
+ body : "*"
+ };
+ }
- // Get the configured HTTP integration.
- rpc GetHttpIntegration(GetHttpIntegrationRequest) returns (GetHttpIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/http"
- };
- }
+ // Get the configured HTTP integration.
+ rpc GetHttpIntegration(GetHttpIntegrationRequest)
+ returns (GetHttpIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/http"
+ };
+ }
- // Update the HTTP integration.
- rpc UpdateHttpIntegration(UpdateHttpIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/http"
- body: "*"
- };
- }
+ // Update the HTTP integration.
+ rpc UpdateHttpIntegration(UpdateHttpIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/http"
+ body : "*"
+ };
+ }
- // Delete the HTTP integration.
- rpc DeleteHttpIntegration(DeleteHttpIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/http"
- };
- }
+ // Delete the HTTP integration.
+ rpc DeleteHttpIntegration(DeleteHttpIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/http"
+ };
+ }
- // Create InfluxDb integration.
- rpc CreateInfluxDbIntegration(CreateInfluxDbIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/influxdb"
- body: "*"
- };
- }
+ // Create InfluxDb integration.
+ rpc CreateInfluxDbIntegration(CreateInfluxDbIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "influxdb"
+ body : "*"
+ };
+ }
- // Get InfluxDb integration.
- rpc GetInfluxDbIntegration(GetInfluxDbIntegrationRequest) returns (GetInfluxDbIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/influxdb"
- };
- }
+ // Get InfluxDb integration.
+ rpc GetInfluxDbIntegration(GetInfluxDbIntegrationRequest)
+ returns (GetInfluxDbIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/influxdb"
+ };
+ }
- // Update InfluxDb integration.
- rpc UpdateInfluxDbIntegration(UpdateInfluxDbIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/influxdb"
- body: "*"
- };
- }
+ // Update InfluxDb integration.
+ rpc UpdateInfluxDbIntegration(UpdateInfluxDbIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "influxdb"
+ body : "*"
+ };
+ }
- // Delete InfluxDb integration.
- rpc DeleteInfluxDbIntegration(DeleteInfluxDbIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/influxdb"
- };
- }
+ // Delete InfluxDb integration.
+ rpc DeleteInfluxDbIntegration(DeleteInfluxDbIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/influxdb"
+ };
+ }
- // Create ThingsBoard integration.
- rpc CreateThingsBoardIntegration(CreateThingsBoardIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/thingsboard"
- body: "*"
- };
- }
+ // Create ThingsBoard integration.
+ rpc CreateThingsBoardIntegration(CreateThingsBoardIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "thingsboard"
+ body : "*"
+ };
+ }
- // Get ThingsBoard integration.
- rpc GetThingsBoardIntegration(GetThingsBoardIntegrationRequest) returns (GetThingsBoardIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/thingsboard"
- };
- }
+ // Get ThingsBoard integration.
+ rpc GetThingsBoardIntegration(GetThingsBoardIntegrationRequest)
+ returns (GetThingsBoardIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/thingsboard"
+ };
+ }
- // Update ThingsBoard integration.
- rpc UpdateThingsBoardIntegration(UpdateThingsBoardIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/thingsboard"
- body: "*"
- };
- }
+ // Update ThingsBoard integration.
+ rpc UpdateThingsBoardIntegration(UpdateThingsBoardIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "thingsboard"
+ body : "*"
+ };
+ }
- // Delete ThingsBoard integration.
- rpc DeleteThingsBoardIntegration(DeleteThingsBoardIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/thingsboard"
- };
- }
+ // Delete ThingsBoard integration.
+ rpc DeleteThingsBoardIntegration(DeleteThingsBoardIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/thingsboard"
+ };
+ }
- // Create myDevices integration.
- rpc CreateMyDevicesIntegration(CreateMyDevicesIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/mydevices"
- body: "*"
- };
- }
+ // Create myDevices integration.
+ rpc CreateMyDevicesIntegration(CreateMyDevicesIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "mydevices"
+ body : "*"
+ };
+ }
- // Get myDevices integration.
- rpc GetMyDevicesIntegration(GetMyDevicesIntegrationRequest) returns (GetMyDevicesIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/mydevices"
- };
- }
+ // Get myDevices integration.
+ rpc GetMyDevicesIntegration(GetMyDevicesIntegrationRequest)
+ returns (GetMyDevicesIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/mydevices"
+ };
+ }
- // Update myDevices integration.
- rpc UpdateMyDevicesIntegration(UpdateMyDevicesIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/mydevices"
- body: "*"
- };
- }
+ // Update myDevices integration.
+ rpc UpdateMyDevicesIntegration(UpdateMyDevicesIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "mydevices"
+ body : "*"
+ };
+ }
- // Delete myDevices integration.
- rpc DeleteMyDevicesIntegration(DeleteMyDevicesIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/mydevices"
- };
- }
+ // Delete myDevices integration.
+ rpc DeleteMyDevicesIntegration(DeleteMyDevicesIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/mydevices"
+ };
+ }
- // Create LoRaCloud integration.
- rpc CreateLoraCloudIntegration(CreateLoraCloudIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/loracloud"
- body: "*"
- };
- }
+ // Create LoRaCloud integration.
+ rpc CreateLoraCloudIntegration(CreateLoraCloudIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "loracloud"
+ body : "*"
+ };
+ }
- // Get LoRaCloud integration.
- rpc GetLoraCloudIntegration(GetLoraCloudIntegrationRequest) returns (GetLoraCloudIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/loracloud"
- };
- }
+ // Get LoRaCloud integration.
+ rpc GetLoraCloudIntegration(GetLoraCloudIntegrationRequest)
+ returns (GetLoraCloudIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/loracloud"
+ };
+ }
- // Update LoRaCloud integration.
- rpc UpdateLoraCloudIntegration(UpdateLoraCloudIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/loracloud"
- body: "*"
- };
- }
+ // Update LoRaCloud integration.
+ rpc UpdateLoraCloudIntegration(UpdateLoraCloudIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "loracloud"
+ body : "*"
+ };
+ }
- // Delete LoRaCloud integration.
- rpc DeleteLoraCloudIntegration(DeleteLoraCloudIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/loracloud"
- };
- }
+ // Delete LoRaCloud integration.
+ rpc DeleteLoraCloudIntegration(DeleteLoraCloudIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/loracloud"
+ };
+ }
- // Create GCP Pub/Sub integration.
- rpc CreateGcpPubSubIntegration(CreateGcpPubSubIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/gcp-pub-sub"
- body: "*"
- };
- }
+ // Create GCP Pub/Sub integration.
+ rpc CreateGcpPubSubIntegration(CreateGcpPubSubIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "gcp-pub-sub"
+ body : "*"
+ };
+ }
- // Get GCP Pub/Sub integration.
- rpc GetGcpPubSubIntegration(GetGcpPubSubIntegrationRequest) returns (GetGcpPubSubIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/gcp-pub-sub"
- };
- }
+ // Get GCP Pub/Sub integration.
+ rpc GetGcpPubSubIntegration(GetGcpPubSubIntegrationRequest)
+ returns (GetGcpPubSubIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/gcp-pub-sub"
+ };
+ }
- // Update GCP Pub/Sub integration.
- rpc UpdateGcpPubSubIntegration(UpdateGcpPubSubIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/gcp-pub-sub"
- body: "*"
- };
- }
+ // Update GCP Pub/Sub integration.
+ rpc UpdateGcpPubSubIntegration(UpdateGcpPubSubIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "gcp-pub-sub"
+ body : "*"
+ };
+ }
- // Delete GCP Pub/Sub integration.
- rpc DeleteGcpPubSubIntegration(DeleteGcpPubSubIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/gcp-pub-sub"
- };
- }
+ // Delete GCP Pub/Sub integration.
+ rpc DeleteGcpPubSubIntegration(DeleteGcpPubSubIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/gcp-pub-sub"
+ };
+ }
- // Create AWS SNS integration.
- rpc CreateAwsSnsIntegration(CreateAwsSnsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/aws-sns"
- body: "*"
- };
- }
+ // Create AWS SNS integration.
+ rpc CreateAwsSnsIntegration(CreateAwsSnsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "aws-sns"
+ body : "*"
+ };
+ }
- // Get AWS SNS integration.
- rpc GetAwsSnsIntegration(GetAwsSnsIntegrationRequest) returns (GetAwsSnsIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/aws-sns"
- };
- }
+ // Get AWS SNS integration.
+ rpc GetAwsSnsIntegration(GetAwsSnsIntegrationRequest)
+ returns (GetAwsSnsIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/aws-sns"
+ };
+ }
- // Update AWS SNS integration.
- rpc UpdateAwsSnsIntegration(UpdateAwsSnsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/aws-sns"
- body: "*"
- };
- }
+ // Update AWS SNS integration.
+ rpc UpdateAwsSnsIntegration(UpdateAwsSnsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "aws-sns"
+ body : "*"
+ };
+ }
- // Delete AWS SNS integration.
- rpc DeleteAwsSnsIntegration(DeleteAwsSnsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/aws-sns"
- };
- }
+ // Delete AWS SNS integration.
+ rpc DeleteAwsSnsIntegration(DeleteAwsSnsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/aws-sns"
+ };
+ }
- // Create Azure Service-Bus integration.
- rpc CreateAzureServiceBusIntegration(CreateAzureServiceBusIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/azure-service-bus"
- body: "*"
- };
- }
+ // Create Azure Service-Bus integration.
+ rpc CreateAzureServiceBusIntegration(CreateAzureServiceBusIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "azure-service-bus"
+ body : "*"
+ };
+ }
- // Get Azure Service-Bus integration.
- rpc GetAzureServiceBusIntegration(GetAzureServiceBusIntegrationRequest) returns (GetAzureServiceBusIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/azure-service-bus"
- };
- }
+ // Get Azure Service-Bus integration.
+ rpc GetAzureServiceBusIntegration(GetAzureServiceBusIntegrationRequest)
+ returns (GetAzureServiceBusIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/azure-service-bus"
+ };
+ }
- // Update Azure Service-Bus integration.
- rpc UpdateAzureServiceBusIntegration(UpdateAzureServiceBusIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/azure-service-bus"
- body: "*"
- };
- }
+ // Update Azure Service-Bus integration.
+ rpc UpdateAzureServiceBusIntegration(UpdateAzureServiceBusIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "azure-service-bus"
+ body : "*"
+ };
+ }
- // Delete Azure Service-Bus integration.
- rpc DeleteAzureServiceBusIntegration(DeleteAzureServiceBusIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/azure-service-bus"
- };
- }
+ // Delete Azure Service-Bus integration.
+ rpc DeleteAzureServiceBusIntegration(DeleteAzureServiceBusIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/"
+ "azure-service-bus"
+ };
+ }
- // Create Pilot Things integration.
- rpc CreatePilotThingsIntegration(CreatePilotThingsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/pilot-things"
- body: "*"
- };
- }
+ // Create Pilot Things integration.
+ rpc CreatePilotThingsIntegration(CreatePilotThingsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "pilot-things"
+ body : "*"
+ };
+ }
- // Get Pilot Things integration.
- rpc GetPilotThingsIntegration(GetPilotThingsIntegrationRequest) returns (GetPilotThingsIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/pilot-things"
- };
- }
+ // Get Pilot Things integration.
+ rpc GetPilotThingsIntegration(GetPilotThingsIntegrationRequest)
+ returns (GetPilotThingsIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/pilot-things"
+ };
+ }
- // Update Pilot Things integration.
- rpc UpdatePilotThingsIntegration(UpdatePilotThingsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/pilot-things"
- body: "*"
- };
- }
+ // Update Pilot Things integration.
+ rpc UpdatePilotThingsIntegration(UpdatePilotThingsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "pilot-things"
+ body : "*"
+ };
+ }
- // Delete Pilot Things integration.
- rpc DeletePilotThingsIntegration(DeletePilotThingsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/pilot-things"
- };
- }
+ // Delete Pilot Things integration.
+ rpc DeletePilotThingsIntegration(DeletePilotThingsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/pilot-things"
+ };
+ }
- // Create IFTTT integration.
- rpc CreateIftttIntegration(CreateIftttIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/ifttt"
- body: "*"
- };
- }
+ // Create IFTTT integration.
+ rpc CreateIftttIntegration(CreateIftttIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/ifttt"
+ body : "*"
+ };
+ }
- // Get IFTTT integration.
- rpc GetIftttIntegration(GetIftttIntegrationRequest) returns (GetIftttIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/ifttt"
- };
- }
+ // Get IFTTT integration.
+ rpc GetIftttIntegration(GetIftttIntegrationRequest)
+ returns (GetIftttIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/ifttt"
+ };
+ }
- // Update IFTTT integration.
- rpc UpdateIftttIntegration(UpdateIftttIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/ifttt"
- body: "*"
- };
- }
+ // Update IFTTT integration.
+ rpc UpdateIftttIntegration(UpdateIftttIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/ifttt"
+ body : "*"
+ };
+ }
- // Delete IFTTT integration.
- rpc DeleteIftttIntegration(DeleteIftttIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/ifttt"
- };
- }
+ // Delete IFTTT integration.
+ rpc DeleteIftttIntegration(DeleteIftttIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/ifttt"
+ };
+ }
- // Generates application ID specific client-certificate.
- rpc GenerateMqttIntegrationClientCertificate(GenerateMqttIntegrationClientCertificateRequest) returns (GenerateMqttIntegrationClientCertificateResponse) {
- option(google.api.http) = {
- post: "/api/applications/{application_id}/integrations/mqtt/certificate"
- };
- }
+ // Generates application ID specific client-certificate.
+ rpc GenerateMqttIntegrationClientCertificate(
+ GenerateMqttIntegrationClientCertificateRequest)
+ returns (GenerateMqttIntegrationClientCertificateResponse) {
+ option (google.api.http) = {
+ post : "/api/applications/{application_id}/integrations/mqtt/certificate"
+ };
+ }
}
enum Encoding {
- JSON = 0;
- PROTOBUF = 1;
+ JSON = 0;
+ PROTOBUF = 1;
}
enum IntegrationKind {
- HTTP = 0;
- INFLUX_DB = 1;
- THINGS_BOARD = 2;
- MY_DEVICES = 3;
- LORA_CLOUD = 4;
- GCP_PUB_SUB = 5;
- AWS_SNS = 6;
- AZURE_SERVICE_BUS = 7;
- PILOT_THINGS = 8;
- MQTT_GLOBAL = 9;
- IFTTT = 10;
+ HTTP = 0;
+ INFLUX_DB = 1;
+ THINGS_BOARD = 2;
+ MY_DEVICES = 3;
+ LORA_CLOUD = 4;
+ GCP_PUB_SUB = 5;
+ AWS_SNS = 6;
+ AZURE_SERVICE_BUS = 7;
+ PILOT_THINGS = 8;
+ MQTT_GLOBAL = 9;
+ IFTTT = 10;
}
message Application {
- // Application ID (UUID).
- // Note: on create this will be automatically generated.
- string id = 1;
+ // Application ID (UUID).
+ // Note: on create this will be automatically generated.
+ string id = 1;
- // Application name.
- string name = 2;
+ // Application name.
+ string name = 2;
- // Application description.
- string description = 3;
+ // Application description.
+ string description = 3;
- // Tenant ID (UUID).
- string tenant_id = 4;
+ // Tenant ID (UUID).
+ string tenant_id = 4;
}
message ApplicationListItem {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
- // Created at timestamp.
- google.protobuf.Timestamp created_at = 2;
+ // Created at timestamp.
+ google.protobuf.Timestamp created_at = 2;
- // Last update timestamp.
- google.protobuf.Timestamp updated_at = 3;
+ // Last update timestamp.
+ google.protobuf.Timestamp updated_at = 3;
- // Application name.
- string name = 4;
-
- // Application description.
- string description = 5;
+ // Application name.
+ string name = 4;
+
+ // Application description.
+ string description = 5;
}
message CreateApplicationRequest {
- // Application object to create.
- Application application = 1;
+ // Application object to create.
+ Application application = 1;
}
message CreateApplicationResponse {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
}
message GetApplicationRequest {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
}
message GetApplicationResponse {
- // Application object.
- Application application = 1;
+ // Application object.
+ Application application = 1;
- // Created at timestamp.
- google.protobuf.Timestamp created_at = 2;
+ // Created at timestamp.
+ google.protobuf.Timestamp created_at = 2;
- // Last update timestamp.
- google.protobuf.Timestamp updated_at = 3;
+ // Last update timestamp.
+ google.protobuf.Timestamp updated_at = 3;
- // Measurement keys.
- // This contains the measurement keys from all the device-profiles that
- // are used by the devices under this application.
- repeated string measurement_keys = 4;
+ // Measurement keys.
+ // This contains the measurement keys from all the device-profiles that
+ // are used by the devices under this application.
+ repeated string measurement_keys = 4;
}
message UpdateApplicationRequest {
- // Application object.
- Application application = 1;
+ // Application object.
+ Application application = 1;
}
message DeleteApplicationRequest {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
}
message ListApplicationsRequest {
- // Max number of applications to return in the result-set.
- uint32 limit = 1;
+ // Max number of applications to return in the result-set.
+ uint32 limit = 1;
- // Offset in the result-set (for pagination).
- uint32 offset = 2;
+ // Offset in the result-set (for pagination).
+ uint32 offset = 2;
- // If set, the given string will be used to search on name (optional).
- string search = 3;
+ // If set, the given string will be used to search on name (optional).
+ string search = 3;
- // Tenant ID to list the applications for.
- string tenant_id = 4;
+ // Tenant ID to list the applications for.
+ string tenant_id = 4;
}
message ListApplicationsResponse {
- // Total number of applications.
- uint32 total_count = 1;
+ // Total number of applications.
+ uint32 total_count = 1;
- // Result-set.
- repeated ApplicationListItem result = 2;
+ // Result-set.
+ repeated ApplicationListItem result = 2;
}
message ListIntegrationsRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message IntegrationListItem {
- // Integration kind.
- IntegrationKind kind = 1;
+ // Integration kind.
+ IntegrationKind kind = 1;
}
message ListIntegrationsResponse {
- // Total number of integrations available within the result-set.
- uint32 total_count = 1;
+ // Total number of integrations available within the result-set.
+ uint32 total_count = 1;
- // Integrations within result-set.
- repeated IntegrationListItem result = 2;
+ // Integrations within result-set.
+ repeated IntegrationListItem result = 2;
}
message HttpIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // HTTP headers to set when making requests.
- map headers = 2;
+ // HTTP headers to set when making requests.
+ map headers = 2;
- // Payload encoding.
- Encoding encoding = 3;
+ // Payload encoding.
+ Encoding encoding = 3;
- // Event endpoint URL.
- // The HTTP integration will POST all events to this enpoint. The request
- // will contain a query parameters "event" containing the type of the
- // event.
- string event_endpoint_url = 4;
+ // Event endpoint URL.
+ // The HTTP integration will POST all events to this enpoint. The request
+ // will contain a query parameters "event" containing the type of the
+ // event.
+ string event_endpoint_url = 4;
}
message CreateHttpIntegrationRequest {
- // Integration object to create.
- HttpIntegration integration = 1;
+ // Integration object to create.
+ HttpIntegration integration = 1;
}
message GetHttpIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetHttpIntegrationResponse {
- // Integration object.
- HttpIntegration integration = 1;
+ // Integration object.
+ HttpIntegration integration = 1;
}
message UpdateHttpIntegrationRequest {
- // Integration object to update.
- HttpIntegration integration = 1;
+ // Integration object to update.
+ HttpIntegration integration = 1;
}
message DeleteHttpIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
enum InfluxDbPrecision {
- NS = 0;
- U = 1;
- MS = 2;
- S = 3;
- M = 4;
- H = 5;
+ NS = 0;
+ U = 1;
+ MS = 2;
+ S = 3;
+ M = 4;
+ H = 5;
}
enum InfluxDbVersion {
- INFLUXDB_1 = 0;
- INFLUXDB_2 = 1;
+ INFLUXDB_1 = 0;
+ INFLUXDB_2 = 1;
}
message InfluxDbIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // InfluxDb API write endpoint (e.g. http://localhost:8086/write).
- string endpoint = 2;
+ // InfluxDb API write endpoint (e.g. http://localhost:8086/write).
+ string endpoint = 2;
- // InfluxDb database name. (InfluxDb v1)
- string db = 3;
+ // InfluxDb database name. (InfluxDb v1)
+ string db = 3;
- // InfluxDb username. (InfluxDb v1)
- string username = 4;
+ // InfluxDb username. (InfluxDb v1)
+ string username = 4;
- // InfluxDb password. (InfluxDb v1)
- string password = 5;
+ // InfluxDb password. (InfluxDb v1)
+ string password = 5;
- // InfluxDb retention policy name. (InfluxDb v1)
- string retention_policy_name = 6;
+ // InfluxDb retention policy name. (InfluxDb v1)
+ string retention_policy_name = 6;
- // InfluxDb timestamp precision (InfluxDb v1).
- InfluxDbPrecision precision = 7;
+ // InfluxDb timestamp precision (InfluxDb v1).
+ InfluxDbPrecision precision = 7;
- // InfluxDb version.
- InfluxDbVersion version = 8;
+ // InfluxDb version.
+ InfluxDbVersion version = 8;
- // Token. (InfluxDb v2)
- string token = 9;
+ // Token. (InfluxDb v2)
+ string token = 9;
- // Organization. (InfluxDb v2)
- string organization = 10;
+ // Organization. (InfluxDb v2)
+ string organization = 10;
- // Bucket. (InfluxDb v2)
- string bucket = 11;
+ // Bucket. (InfluxDb v2)
+ string bucket = 11;
}
message CreateInfluxDbIntegrationRequest {
- // Integration object to create.
- InfluxDbIntegration integration = 1;
+ // Integration object to create.
+ InfluxDbIntegration integration = 1;
}
message GetInfluxDbIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetInfluxDbIntegrationResponse {
- // Integration object.
- InfluxDbIntegration integration = 1;
+ // Integration object.
+ InfluxDbIntegration integration = 1;
}
message UpdateInfluxDbIntegrationRequest {
- // Integration object to update.
- InfluxDbIntegration integration = 1;
+ // Integration object to update.
+ InfluxDbIntegration integration = 1;
}
message DeleteInfluxDbIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message ThingsBoardIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // ThingsBoard server endpoint, e.g. https://example.com
- string server = 2;
+ // ThingsBoard server endpoint, e.g. https://example.com
+ string server = 2;
}
message CreateThingsBoardIntegrationRequest {
- // Integration object to create.
- ThingsBoardIntegration integration = 1;
+ // Integration object to create.
+ ThingsBoardIntegration integration = 1;
}
message GetThingsBoardIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetThingsBoardIntegrationResponse {
- // Integration object.
- ThingsBoardIntegration integration = 1;
+ // Integration object.
+ ThingsBoardIntegration integration = 1;
}
message UpdateThingsBoardIntegrationRequest {
- // Integration object to update.
- ThingsBoardIntegration integration = 1;
+ // Integration object to update.
+ ThingsBoardIntegration integration = 1;
}
message DeleteThingsBoardIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message MyDevicesIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // myDevices API endpoint.
- string endpoint = 2;
+ // myDevices API endpoint.
+ string endpoint = 2;
}
message CreateMyDevicesIntegrationRequest {
- // Integration object to create.
- MyDevicesIntegration integration = 1;
+ // Integration object to create.
+ MyDevicesIntegration integration = 1;
}
message GetMyDevicesIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetMyDevicesIntegrationResponse {
- // Integration object.
- MyDevicesIntegration integration = 1;
+ // Integration object.
+ MyDevicesIntegration integration = 1;
}
message UpdateMyDevicesIntegrationRequest {
- // Integration object to update.
- MyDevicesIntegration integration = 1;
+ // Integration object to update.
+ MyDevicesIntegration integration = 1;
}
message DeleteMyDevicesIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message LoraCloudIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Modem & Geolocation Services configuration.
- LoraCloudModemGeolocationServices modem_geolocation_services = 2;
+ // Modem & Geolocation Services configuration.
+ LoraCloudModemGeolocationServices modem_geolocation_services = 2;
}
message LoraCloudModemGeolocationServices {
- // API token.
- string token = 1;
+ // API token.
+ string token = 1;
- // Device implements Modem / Modem-E stack.
- bool modem_enabled = 2;
+ // Device implements Modem / Modem-E stack.
+ bool modem_enabled = 2;
- // Forward FPorts.
- // Forward uplink messages matching the given FPorts to the MGS.
- repeated uint32 forward_f_ports = 16;
+ // Forward FPorts.
+ // Forward uplink messages matching the given FPorts to the MGS.
+ repeated uint32 forward_f_ports = 16;
- // Use rx time for GNSS resolving.
- // In case this is set to true, the MGS resolver will use the RX time of the
- // network instead of the timestamp included in the LR1110 payload.
- bool gnss_use_rx_time = 5;
+ // Use rx time for GNSS resolving.
+ // In case this is set to true, the MGS resolver will use the RX time of the
+ // network instead of the timestamp included in the LR1110 payload.
+ bool gnss_use_rx_time = 5;
- // Use gateway location for GNSS resolving.
- // In the case this is set to true, ChirpStack will provide the location of
- // one of the gateways to the MGS resolver to aid the resolving process.
- // Disable this in case the gateway location is not accurate / incorrectly
- // configured as an incorrect location will cause the resolver to return an
- // error.
- bool gnss_use_gateway_location = 17;
+ // Use gateway location for GNSS resolving.
+ // In the case this is set to true, ChirpStack will provide the location of
+ // one of the gateways to the MGS resolver to aid the resolving process.
+ // Disable this in case the gateway location is not accurate / incorrectly
+ // configured as an incorrect location will cause the resolver to return an
+ // error.
+ bool gnss_use_gateway_location = 17;
- // Parse TLV records.
- // If enabled, stream records (expected in TLV format) are scanned for GNSS
- // data (0x06 or 0x07). If found, ChirpStack will make an additional
- // geolocation call to the MGS API for resolving the location of the detected
- // payload.
- bool parse_tlv = 6;
+ // Parse TLV records.
+ // If enabled, stream records (expected in TLV format) are scanned for GNSS
+ // data (0x06 or 0x07). If found, ChirpStack will make an additional
+ // geolocation call to the MGS API for resolving the location of the detected
+ // payload.
+ bool parse_tlv = 6;
- // Geolocation buffer TTL (in seconds).
- // If > 0, uplink RX meta-data will be stored in a buffer so that
- // the meta-data of multiple uplinks can be used for geolocation.
- uint32 geolocation_buffer_ttl = 7;
+ // Geolocation buffer TTL (in seconds).
+ // If > 0, uplink RX meta-data will be stored in a buffer so that
+ // the meta-data of multiple uplinks can be used for geolocation.
+ uint32 geolocation_buffer_ttl = 7;
- // Geolocation minimum buffer size.
- // If > 0, geolocation will only be performed when the buffer has
- // at least the given size.
- uint32 geolocation_min_buffer_size = 8;
+ // Geolocation minimum buffer size.
+ // If > 0, geolocation will only be performed when the buffer has
+ // at least the given size.
+ uint32 geolocation_min_buffer_size = 8;
- // TDOA based geolocation is enabled.
- bool geolocation_tdoa = 9;
+ // TDOA based geolocation is enabled.
+ bool geolocation_tdoa = 9;
- // RSSI based geolocation is enabled.
- bool geolocation_rssi = 10;
+ // RSSI based geolocation is enabled.
+ bool geolocation_rssi = 10;
- // GNSS based geolocation is enabled (LR1110).
- bool geolocation_gnss = 11;
+ // GNSS based geolocation is enabled (LR1110).
+ bool geolocation_gnss = 11;
- // GNSS payload field.
- // This holds the name of the field in the decoded payload object which
- // contains the GNSS payload bytes (as HEX string).
- string geolocation_gnss_payload_field = 12;
+ // GNSS payload field.
+ // This holds the name of the field in the decoded payload object which
+ // contains the GNSS payload bytes (as HEX string).
+ string geolocation_gnss_payload_field = 12;
- // GNSS use RX time.
- // In case this is set to true, the resolver will use the RX time of the
- // network instead of the timestamp included in the LR1110 payload.
- bool geolocation_gnss_use_rx_time = 13;
+ // GNSS use RX time.
+ // In case this is set to true, the resolver will use the RX time of the
+ // network instead of the timestamp included in the LR1110 payload.
+ bool geolocation_gnss_use_rx_time = 13;
- // Wifi based geolocation is enabled.
- bool geolocation_wifi = 14;
+ // Wifi based geolocation is enabled.
+ bool geolocation_wifi = 14;
- // Wifi payload field.
- // This holds the name of the field in the decoded payload object which
- // contains an array of objects with the following fields:
- // * macAddress - e.g. 01:23:45:67:89:ab
- // * signalStrength - e.g. -51 (optional)
- string geolocation_wifi_payload_field = 15;
+ // Wifi payload field.
+ // This holds the name of the field in the decoded payload object which
+ // contains an array of objects with the following fields:
+ // * macAddress - e.g. 01:23:45:67:89:ab
+ // * signalStrength - e.g. -51 (optional)
+ string geolocation_wifi_payload_field = 15;
}
message CreateLoraCloudIntegrationRequest {
- // Integration object to create.
- LoraCloudIntegration integration = 1;
+ // Integration object to create.
+ LoraCloudIntegration integration = 1;
}
message GetLoraCloudIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetLoraCloudIntegrationResponse {
- // Integration object.
- LoraCloudIntegration integration = 1;
+ // Integration object.
+ LoraCloudIntegration integration = 1;
}
message UpdateLoraCloudIntegrationRequest {
- // Integration object to update.
- LoraCloudIntegration integration = 1;
+ // Integration object to update.
+ LoraCloudIntegration integration = 1;
}
message DeleteLoraCloudIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GcpPubSubIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Encoding.
- Encoding encoding = 2;
+ // Encoding.
+ Encoding encoding = 2;
- // Credentials file.
- // This IAM service-account credentials file (JSON) must have the following Pub/Sub roles:
- // * Pub/Sub Publisher
- string credentials_file = 3;
+ // Credentials file.
+ // This IAM service-account credentials file (JSON) must have the following
+ // Pub/Sub roles:
+ // * Pub/Sub Publisher
+ string credentials_file = 3;
- // Project ID.
- string project_id = 4;
+ // Project ID.
+ string project_id = 4;
- // Topic name.
- // This is the name of the Pub/Sub topic.
- string topic_name = 5;
+ // Topic name.
+ // This is the name of the Pub/Sub topic.
+ string topic_name = 5;
}
message CreateGcpPubSubIntegrationRequest {
- // Integration object to create.
- GcpPubSubIntegration integration = 1;
+ // Integration object to create.
+ GcpPubSubIntegration integration = 1;
}
message GetGcpPubSubIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetGcpPubSubIntegrationResponse {
- // Integration object.
- GcpPubSubIntegration integration = 1;
+ // Integration object.
+ GcpPubSubIntegration integration = 1;
}
message UpdateGcpPubSubIntegrationRequest {
- // Integration object to update.
- GcpPubSubIntegration integration = 1;
+ // Integration object to update.
+ GcpPubSubIntegration integration = 1;
}
message DeleteGcpPubSubIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message AwsSnsIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Encoding.
- Encoding encoding = 2;
+ // Encoding.
+ Encoding encoding = 2;
- // AWS region.
- string region = 3;
+ // AWS region.
+ string region = 3;
- // AWS Access Key ID.
- string access_key_id = 4;
+ // AWS Access Key ID.
+ string access_key_id = 4;
- // AWS Secret Access Key.
- string secret_access_key = 5;
+ // AWS Secret Access Key.
+ string secret_access_key = 5;
- // Topic ARN.
- string topic_arn = 6;
+ // Topic ARN.
+ string topic_arn = 6;
}
message CreateAwsSnsIntegrationRequest {
- // Integration object to create.
- AwsSnsIntegration integration = 1;
+ // Integration object to create.
+ AwsSnsIntegration integration = 1;
}
message GetAwsSnsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetAwsSnsIntegrationResponse {
- // Integration object.
- AwsSnsIntegration integration = 1;
+ // Integration object.
+ AwsSnsIntegration integration = 1;
}
message UpdateAwsSnsIntegrationRequest {
- // Integration object to update.
- AwsSnsIntegration integration = 1;
+ // Integration object to update.
+ AwsSnsIntegration integration = 1;
}
message DeleteAwsSnsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message AzureServiceBusIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Encoding.
- Encoding encoding = 2;
+ // Encoding.
+ Encoding encoding = 2;
- // Connection string.
- string connection_string = 3;
+ // Connection string.
+ string connection_string = 3;
- // Publish name.
- // This is the name of the topic or queue.
- string publish_name = 4;
+ // Publish name.
+ // This is the name of the topic or queue.
+ string publish_name = 4;
}
message CreateAzureServiceBusIntegrationRequest {
- // Integration object to create.
- AzureServiceBusIntegration integration = 1;
+ // Integration object to create.
+ AzureServiceBusIntegration integration = 1;
}
message GetAzureServiceBusIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetAzureServiceBusIntegrationResponse {
- // Integration object.
- AzureServiceBusIntegration integration = 1;
+ // Integration object.
+ AzureServiceBusIntegration integration = 1;
}
message UpdateAzureServiceBusIntegrationRequest {
- // Integration object to create.
- AzureServiceBusIntegration integration = 1;
+ // Integration object to create.
+ AzureServiceBusIntegration integration = 1;
}
message DeleteAzureServiceBusIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message PilotThingsIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Server URL.
- string server = 2;
+ // Server URL.
+ string server = 2;
- // Authentication token.
- string token = 3;
+ // Authentication token.
+ string token = 3;
}
message CreatePilotThingsIntegrationRequest {
- // Integration object to create.
- PilotThingsIntegration integration = 1;
+ // Integration object to create.
+ PilotThingsIntegration integration = 1;
}
message GetPilotThingsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetPilotThingsIntegrationResponse {
- // Integration object.
- PilotThingsIntegration integration = 1;
+ // Integration object.
+ PilotThingsIntegration integration = 1;
}
message UpdatePilotThingsIntegrationRequest {
- // Integration object to update.
- PilotThingsIntegration integration = 1;
+ // Integration object to update.
+ PilotThingsIntegration integration = 1;
}
message DeletePilotThingsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message IftttIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Key.
- // This key can be obtained from the IFTTT Webhooks documentation page.
- string key = 2;
+ // Key.
+ // This key can be obtained from the IFTTT Webhooks documentation page.
+ string key = 2;
- // Values.
- // Up to 2 values can be forwarded to IFTTT. These values must map to the
- // decoded payload keys. For example:
- // {
- // "batteryLevel": 75.3,
- // "buttons": [{"pressed": false}, {"pressed": true}]
- // }
- // You would specify the following fields:
- // uplink_values = ["batteryLevel", "buttons_0_pressed"]
- //
- // Note: The first value is always used for the DevEUI.
- repeated string uplink_values = 3;
+ // Values.
+ // Up to 2 values can be forwarded to IFTTT. These values must map to the
+ // decoded payload keys. For example:
+ // {
+ // "batteryLevel": 75.3,
+ // "buttons": [{"pressed": false}, {"pressed": true}]
+ // }
+ // You would specify the following fields:
+ // uplink_values = ["batteryLevel", "buttons_0_pressed"]
+ //
+ // Notes: The first value is always used for the DevEUI.
+ // Ignored if arbitrary_json is set to true.
+ repeated string uplink_values = 3;
+
+ // Arbitrary JSON.
+ // If set to true, ChirpStack events will be sent as-is as arbitrary JSON
+ // payload. If set to false (default), the 3 JSON values format will be used.
+ bool arbitrary_json = 4;
+
+ // Event prefix.
+ // If set, the event name will be PREFIX_EVENT. For example if event_prefix
+ // is set to weatherstation, and uplink event will be sent as
+ // weatherstation_up to the IFTTT webhook.
+ // Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
+ string event_prefix = 5;
}
message CreateIftttIntegrationRequest {
- // Integration object.
- IftttIntegration integration = 1;
+ // Integration object.
+ IftttIntegration integration = 1;
}
message GetIftttIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetIftttIntegrationResponse {
- // Integration object.
- IftttIntegration integration = 1;
+ // Integration object.
+ IftttIntegration integration = 1;
}
message UpdateIftttIntegrationRequest {
- // Integration object to update.
- IftttIntegration integration = 1;
+ // Integration object to update.
+ IftttIntegration integration = 1;
}
message DeleteIftttIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GenerateMqttIntegrationClientCertificateRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GenerateMqttIntegrationClientCertificateResponse {
- // TLS certificate.
- string tls_cert = 1;
+ // TLS certificate.
+ string tls_cert = 1;
- // TLS key.
- string tls_key = 2;
+ // TLS key.
+ string tls_key = 2;
- // CA certificate.
- string ca_cert = 3;
+ // CA certificate.
+ string ca_cert = 3;
- // Expires at defines the expiration date of the certificate.
- google.protobuf.Timestamp expires_at = 4;
+ // Expires at defines the expiration date of the certificate.
+ google.protobuf.Timestamp expires_at = 4;
}
diff --git a/api/python/src/chirpstack_api/api/application_pb2.py b/api/python/src/chirpstack_api/api/application_pb2.py
index bd40bf44..582b94af 100644
--- a/api/python/src/chirpstack_api/api/application_pb2.py
+++ b/api/python/src/chirpstack_api/api/application_pb2.py
@@ -16,7 +16,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__
from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$chirpstack-api/api/application.proto\x12\x03\x61pi\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\"O\n\x0b\x41pplication\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x11\n\ttenant_id\x18\x04 \x01(\t\"\xa4\x01\n\x13\x41pplicationListItem\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x05 \x01(\t\"A\n\x18\x43reateApplicationRequest\x12%\n\x0b\x61pplication\x18\x01 \x01(\x0b\x32\x10.api.Application\"\'\n\x19\x43reateApplicationResponse\x12\n\n\x02id\x18\x01 \x01(\t\"#\n\x15GetApplicationRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\xb9\x01\n\x16GetApplicationResponse\x12%\n\x0b\x61pplication\x18\x01 \x01(\x0b\x32\x10.api.Application\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x18\n\x10measurement_keys\x18\x04 \x03(\t\"A\n\x18UpdateApplicationRequest\x12%\n\x0b\x61pplication\x18\x01 \x01(\x0b\x32\x10.api.Application\"&\n\x18\x44\x65leteApplicationRequest\x12\n\n\x02id\x18\x01 \x01(\t\"[\n\x17ListApplicationsRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\x12\x0e\n\x06search\x18\x03 \x01(\t\x12\x11\n\ttenant_id\x18\x04 \x01(\t\"Y\n\x18ListApplicationsResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12(\n\x06result\x18\x02 \x03(\x0b\x32\x18.api.ApplicationListItem\"1\n\x17ListIntegrationsRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"9\n\x13IntegrationListItem\x12\"\n\x04kind\x18\x01 \x01(\x0e\x32\x14.api.IntegrationKind\"Y\n\x18ListIntegrationsResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12(\n\x06result\x18\x02 \x03(\x0b\x32\x18.api.IntegrationListItem\"\xca\x01\n\x0fHttpIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12\x32\n\x07headers\x18\x02 \x03(\x0b\x32!.api.HttpIntegration.HeadersEntry\x12\x1f\n\x08\x65ncoding\x18\x03 \x01(\x0e\x32\r.api.Encoding\x12\x1a\n\x12\x65vent_endpoint_url\x18\x04 \x01(\t\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"I\n\x1c\x43reateHttpIntegrationRequest\x12)\n\x0bintegration\x18\x01 \x01(\x0b\x32\x14.api.HttpIntegration\"3\n\x19GetHttpIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"G\n\x1aGetHttpIntegrationResponse\x12)\n\x0bintegration\x18\x01 \x01(\x0b\x32\x14.api.HttpIntegration\"I\n\x1cUpdateHttpIntegrationRequest\x12)\n\x0bintegration\x18\x01 \x01(\x0b\x32\x14.api.HttpIntegration\"6\n\x1c\x44\x65leteHttpIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"\x95\x02\n\x13InfluxDbIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x02 \x01(\t\x12\n\n\x02\x64\x62\x18\x03 \x01(\t\x12\x10\n\x08username\x18\x04 \x01(\t\x12\x10\n\x08password\x18\x05 \x01(\t\x12\x1d\n\x15retention_policy_name\x18\x06 \x01(\t\x12)\n\tprecision\x18\x07 \x01(\x0e\x32\x16.api.InfluxDbPrecision\x12%\n\x07version\x18\x08 \x01(\x0e\x32\x14.api.InfluxDbVersion\x12\r\n\x05token\x18\t \x01(\t\x12\x14\n\x0corganization\x18\n \x01(\t\x12\x0e\n\x06\x62ucket\x18\x0b \x01(\t\"Q\n CreateInfluxDbIntegrationRequest\x12-\n\x0bintegration\x18\x01 \x01(\x0b\x32\x18.api.InfluxDbIntegration\"7\n\x1dGetInfluxDbIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"O\n\x1eGetInfluxDbIntegrationResponse\x12-\n\x0bintegration\x18\x01 \x01(\x0b\x32\x18.api.InfluxDbIntegration\"Q\n UpdateInfluxDbIntegrationRequest\x12-\n\x0bintegration\x18\x01 \x01(\x0b\x32\x18.api.InfluxDbIntegration\":\n DeleteInfluxDbIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"@\n\x16ThingsBoardIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12\x0e\n\x06server\x18\x02 \x01(\t\"W\n#CreateThingsBoardIntegrationRequest\x12\x30\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1b.api.ThingsBoardIntegration\":\n GetThingsBoardIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"U\n!GetThingsBoardIntegrationResponse\x12\x30\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1b.api.ThingsBoardIntegration\"W\n#UpdateThingsBoardIntegrationRequest\x12\x30\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1b.api.ThingsBoardIntegration\"=\n#DeleteThingsBoardIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"@\n\x14MyDevicesIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x02 \x01(\t\"S\n!CreateMyDevicesIntegrationRequest\x12.\n\x0bintegration\x18\x01 \x01(\x0b\x32\x19.api.MyDevicesIntegration\"8\n\x1eGetMyDevicesIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"Q\n\x1fGetMyDevicesIntegrationResponse\x12.\n\x0bintegration\x18\x01 \x01(\x0b\x32\x19.api.MyDevicesIntegration\"S\n!UpdateMyDevicesIntegrationRequest\x12.\n\x0bintegration\x18\x01 \x01(\x0b\x32\x19.api.MyDevicesIntegration\";\n!DeleteMyDevicesIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"z\n\x14LoraCloudIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12J\n\x1amodem_geolocation_services\x18\x02 \x01(\x0b\x32&.api.LoraCloudModemGeolocationServices\"\xd5\x03\n!LoraCloudModemGeolocationServices\x12\r\n\x05token\x18\x01 \x01(\t\x12\x15\n\rmodem_enabled\x18\x02 \x01(\x08\x12\x17\n\x0f\x66orward_f_ports\x18\x10 \x03(\r\x12\x18\n\x10gnss_use_rx_time\x18\x05 \x01(\x08\x12!\n\x19gnss_use_gateway_location\x18\x11 \x01(\x08\x12\x11\n\tparse_tlv\x18\x06 \x01(\x08\x12\x1e\n\x16geolocation_buffer_ttl\x18\x07 \x01(\r\x12#\n\x1bgeolocation_min_buffer_size\x18\x08 \x01(\r\x12\x18\n\x10geolocation_tdoa\x18\t \x01(\x08\x12\x18\n\x10geolocation_rssi\x18\n \x01(\x08\x12\x18\n\x10geolocation_gnss\x18\x0b \x01(\x08\x12&\n\x1egeolocation_gnss_payload_field\x18\x0c \x01(\t\x12$\n\x1cgeolocation_gnss_use_rx_time\x18\r \x01(\x08\x12\x18\n\x10geolocation_wifi\x18\x0e \x01(\x08\x12&\n\x1egeolocation_wifi_payload_field\x18\x0f \x01(\t\"S\n!CreateLoraCloudIntegrationRequest\x12.\n\x0bintegration\x18\x01 \x01(\x0b\x32\x19.api.LoraCloudIntegration\"8\n\x1eGetLoraCloudIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"Q\n\x1fGetLoraCloudIntegrationResponse\x12.\n\x0bintegration\x18\x01 \x01(\x0b\x32\x19.api.LoraCloudIntegration\"S\n!UpdateLoraCloudIntegrationRequest\x12.\n\x0bintegration\x18\x01 \x01(\x0b\x32\x19.api.LoraCloudIntegration\";\n!DeleteLoraCloudIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"\x91\x01\n\x14GcpPubSubIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12\x1f\n\x08\x65ncoding\x18\x02 \x01(\x0e\x32\r.api.Encoding\x12\x18\n\x10\x63redentials_file\x18\x03 \x01(\t\x12\x12\n\nproject_id\x18\x04 \x01(\t\x12\x12\n\ntopic_name\x18\x05 \x01(\t\"S\n!CreateGcpPubSubIntegrationRequest\x12.\n\x0bintegration\x18\x01 \x01(\x0b\x32\x19.api.GcpPubSubIntegration\"8\n\x1eGetGcpPubSubIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"Q\n\x1fGetGcpPubSubIntegrationResponse\x12.\n\x0bintegration\x18\x01 \x01(\x0b\x32\x19.api.GcpPubSubIntegration\"S\n!UpdateGcpPubSubIntegrationRequest\x12.\n\x0bintegration\x18\x01 \x01(\x0b\x32\x19.api.GcpPubSubIntegration\";\n!DeleteGcpPubSubIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"\xa1\x01\n\x11\x41wsSnsIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12\x1f\n\x08\x65ncoding\x18\x02 \x01(\x0e\x32\r.api.Encoding\x12\x0e\n\x06region\x18\x03 \x01(\t\x12\x15\n\raccess_key_id\x18\x04 \x01(\t\x12\x19\n\x11secret_access_key\x18\x05 \x01(\t\x12\x11\n\ttopic_arn\x18\x06 \x01(\t\"M\n\x1e\x43reateAwsSnsIntegrationRequest\x12+\n\x0bintegration\x18\x01 \x01(\x0b\x32\x16.api.AwsSnsIntegration\"5\n\x1bGetAwsSnsIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"K\n\x1cGetAwsSnsIntegrationResponse\x12+\n\x0bintegration\x18\x01 \x01(\x0b\x32\x16.api.AwsSnsIntegration\"M\n\x1eUpdateAwsSnsIntegrationRequest\x12+\n\x0bintegration\x18\x01 \x01(\x0b\x32\x16.api.AwsSnsIntegration\"8\n\x1e\x44\x65leteAwsSnsIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"\x86\x01\n\x1a\x41zureServiceBusIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12\x1f\n\x08\x65ncoding\x18\x02 \x01(\x0e\x32\r.api.Encoding\x12\x19\n\x11\x63onnection_string\x18\x03 \x01(\t\x12\x14\n\x0cpublish_name\x18\x04 \x01(\t\"_\n\'CreateAzureServiceBusIntegrationRequest\x12\x34\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1f.api.AzureServiceBusIntegration\">\n$GetAzureServiceBusIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"]\n%GetAzureServiceBusIntegrationResponse\x12\x34\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1f.api.AzureServiceBusIntegration\"_\n\'UpdateAzureServiceBusIntegrationRequest\x12\x34\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1f.api.AzureServiceBusIntegration\"A\n\'DeleteAzureServiceBusIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"O\n\x16PilotThingsIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12\x0e\n\x06server\x18\x02 \x01(\t\x12\r\n\x05token\x18\x03 \x01(\t\"W\n#CreatePilotThingsIntegrationRequest\x12\x30\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1b.api.PilotThingsIntegration\":\n GetPilotThingsIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"U\n!GetPilotThingsIntegrationResponse\x12\x30\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1b.api.PilotThingsIntegration\"W\n#UpdatePilotThingsIntegrationRequest\x12\x30\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1b.api.PilotThingsIntegration\"=\n#DeletePilotThingsIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"N\n\x10IftttIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\x15\n\ruplink_values\x18\x03 \x03(\t\"K\n\x1d\x43reateIftttIntegrationRequest\x12*\n\x0bintegration\x18\x01 \x01(\x0b\x32\x15.api.IftttIntegration\"4\n\x1aGetIftttIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"I\n\x1bGetIftttIntegrationResponse\x12*\n\x0bintegration\x18\x01 \x01(\x0b\x32\x15.api.IftttIntegration\"K\n\x1dUpdateIftttIntegrationRequest\x12*\n\x0bintegration\x18\x01 \x01(\x0b\x32\x15.api.IftttIntegration\"7\n\x1d\x44\x65leteIftttIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"I\n/GenerateMqttIntegrationClientCertificateRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"\x96\x01\n0GenerateMqttIntegrationClientCertificateResponse\x12\x10\n\x08tls_cert\x18\x01 \x01(\t\x12\x0f\n\x07tls_key\x18\x02 \x01(\t\x12\x0f\n\x07\x63\x61_cert\x18\x03 \x01(\t\x12.\n\nexpires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp*\"\n\x08\x45ncoding\x12\x08\n\x04JSON\x10\x00\x12\x0c\n\x08PROTOBUF\x10\x01*\xbf\x01\n\x0fIntegrationKind\x12\x08\n\x04HTTP\x10\x00\x12\r\n\tINFLUX_DB\x10\x01\x12\x10\n\x0cTHINGS_BOARD\x10\x02\x12\x0e\n\nMY_DEVICES\x10\x03\x12\x0e\n\nLORA_CLOUD\x10\x04\x12\x0f\n\x0bGCP_PUB_SUB\x10\x05\x12\x0b\n\x07\x41WS_SNS\x10\x06\x12\x15\n\x11\x41ZURE_SERVICE_BUS\x10\x07\x12\x10\n\x0cPILOT_THINGS\x10\x08\x12\x0f\n\x0bMQTT_GLOBAL\x10\t\x12\t\n\x05IFTTT\x10\n*?\n\x11InfluxDbPrecision\x12\x06\n\x02NS\x10\x00\x12\x05\n\x01U\x10\x01\x12\x06\n\x02MS\x10\x02\x12\x05\n\x01S\x10\x03\x12\x05\n\x01M\x10\x04\x12\x05\n\x01H\x10\x05*1\n\x0fInfluxDbVersion\x12\x0e\n\nINFLUXDB_1\x10\x00\x12\x0e\n\nINFLUXDB_2\x10\x01\x32\xb8<\n\x12\x41pplicationService\x12\x65\n\x06\x43reate\x12\x1d.api.CreateApplicationRequest\x1a\x1e.api.CreateApplicationResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/api/applications:\x01*\x12^\n\x03Get\x12\x1a.api.GetApplicationRequest\x1a\x1b.api.GetApplicationResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\x12\x16/api/applications/{id}\x12n\n\x06Update\x12\x1d.api.UpdateApplicationRequest\x1a\x16.google.protobuf.Empty\"-\x82\xd3\xe4\x93\x02\'\x1a\"/api/applications/{application.id}:\x01*\x12_\n\x06\x44\x65lete\x12\x1d.api.DeleteApplicationRequest\x1a\x16.google.protobuf.Empty\"\x1e\x82\xd3\xe4\x93\x02\x18*\x16/api/applications/{id}\x12^\n\x04List\x12\x1c.api.ListApplicationsRequest\x1a\x1d.api.ListApplicationsResponse\"\x19\x82\xd3\xe4\x93\x02\x13\x12\x11/api/applications\x12\x88\x01\n\x10ListIntegrations\x12\x1c.api.ListIntegrationsRequest\x1a\x1d.api.ListIntegrationsResponse\"7\x82\xd3\xe4\x93\x02\x31\x12//api/applications/{application_id}/integrations\x12\x9f\x01\n\x15\x43reateHttpIntegration\x12!.api.CreateHttpIntegrationRequest\x1a\x16.google.protobuf.Empty\"K\x82\xd3\xe4\x93\x02\x45\"@/api/applications/{integration.application_id}/integrations/http:\x01*\x12\x93\x01\n\x12GetHttpIntegration\x12\x1e.api.GetHttpIntegrationRequest\x1a\x1f.api.GetHttpIntegrationResponse\"<\x82\xd3\xe4\x93\x02\x36\x12\x34/api/applications/{application_id}/integrations/http\x12\x9f\x01\n\x15UpdateHttpIntegration\x12!.api.UpdateHttpIntegrationRequest\x1a\x16.google.protobuf.Empty\"K\x82\xd3\xe4\x93\x02\x45\x1a@/api/applications/{integration.application_id}/integrations/http:\x01*\x12\x90\x01\n\x15\x44\x65leteHttpIntegration\x12!.api.DeleteHttpIntegrationRequest\x1a\x16.google.protobuf.Empty\"<\x82\xd3\xe4\x93\x02\x36*4/api/applications/{application_id}/integrations/http\x12\xab\x01\n\x19\x43reateInfluxDbIntegration\x12%.api.CreateInfluxDbIntegrationRequest\x1a\x16.google.protobuf.Empty\"O\x82\xd3\xe4\x93\x02I\"D/api/applications/{integration.application_id}/integrations/influxdb:\x01*\x12\xa3\x01\n\x16GetInfluxDbIntegration\x12\".api.GetInfluxDbIntegrationRequest\x1a#.api.GetInfluxDbIntegrationResponse\"@\x82\xd3\xe4\x93\x02:\x12\x38/api/applications/{application_id}/integrations/influxdb\x12\xab\x01\n\x19UpdateInfluxDbIntegration\x12%.api.UpdateInfluxDbIntegrationRequest\x1a\x16.google.protobuf.Empty\"O\x82\xd3\xe4\x93\x02I\x1a\x44/api/applications/{integration.application_id}/integrations/influxdb:\x01*\x12\x9c\x01\n\x19\x44\x65leteInfluxDbIntegration\x12%.api.DeleteInfluxDbIntegrationRequest\x1a\x16.google.protobuf.Empty\"@\x82\xd3\xe4\x93\x02:*8/api/applications/{application_id}/integrations/influxdb\x12\xb4\x01\n\x1c\x43reateThingsBoardIntegration\x12(.api.CreateThingsBoardIntegrationRequest\x1a\x16.google.protobuf.Empty\"R\x82\xd3\xe4\x93\x02L\"G/api/applications/{integration.application_id}/integrations/thingsboard:\x01*\x12\xaf\x01\n\x19GetThingsBoardIntegration\x12%.api.GetThingsBoardIntegrationRequest\x1a&.api.GetThingsBoardIntegrationResponse\"C\x82\xd3\xe4\x93\x02=\x12;/api/applications/{application_id}/integrations/thingsboard\x12\xb4\x01\n\x1cUpdateThingsBoardIntegration\x12(.api.UpdateThingsBoardIntegrationRequest\x1a\x16.google.protobuf.Empty\"R\x82\xd3\xe4\x93\x02L\x1aG/api/applications/{integration.application_id}/integrations/thingsboard:\x01*\x12\xa5\x01\n\x1c\x44\x65leteThingsBoardIntegration\x12(.api.DeleteThingsBoardIntegrationRequest\x1a\x16.google.protobuf.Empty\"C\x82\xd3\xe4\x93\x02=*;/api/applications/{application_id}/integrations/thingsboard\x12\xae\x01\n\x1a\x43reateMyDevicesIntegration\x12&.api.CreateMyDevicesIntegrationRequest\x1a\x16.google.protobuf.Empty\"P\x82\xd3\xe4\x93\x02J\"E/api/applications/{integration.application_id}/integrations/mydevices:\x01*\x12\xa7\x01\n\x17GetMyDevicesIntegration\x12#.api.GetMyDevicesIntegrationRequest\x1a$.api.GetMyDevicesIntegrationResponse\"A\x82\xd3\xe4\x93\x02;\x12\x39/api/applications/{application_id}/integrations/mydevices\x12\xae\x01\n\x1aUpdateMyDevicesIntegration\x12&.api.UpdateMyDevicesIntegrationRequest\x1a\x16.google.protobuf.Empty\"P\x82\xd3\xe4\x93\x02J\x1a\x45/api/applications/{integration.application_id}/integrations/mydevices:\x01*\x12\x9f\x01\n\x1a\x44\x65leteMyDevicesIntegration\x12&.api.DeleteMyDevicesIntegrationRequest\x1a\x16.google.protobuf.Empty\"A\x82\xd3\xe4\x93\x02;*9/api/applications/{application_id}/integrations/mydevices\x12\xae\x01\n\x1a\x43reateLoraCloudIntegration\x12&.api.CreateLoraCloudIntegrationRequest\x1a\x16.google.protobuf.Empty\"P\x82\xd3\xe4\x93\x02J\"E/api/applications/{integration.application_id}/integrations/loracloud:\x01*\x12\xa7\x01\n\x17GetLoraCloudIntegration\x12#.api.GetLoraCloudIntegrationRequest\x1a$.api.GetLoraCloudIntegrationResponse\"A\x82\xd3\xe4\x93\x02;\x12\x39/api/applications/{application_id}/integrations/loracloud\x12\xae\x01\n\x1aUpdateLoraCloudIntegration\x12&.api.UpdateLoraCloudIntegrationRequest\x1a\x16.google.protobuf.Empty\"P\x82\xd3\xe4\x93\x02J\x1a\x45/api/applications/{integration.application_id}/integrations/loracloud:\x01*\x12\x9f\x01\n\x1a\x44\x65leteLoraCloudIntegration\x12&.api.DeleteLoraCloudIntegrationRequest\x1a\x16.google.protobuf.Empty\"A\x82\xd3\xe4\x93\x02;*9/api/applications/{application_id}/integrations/loracloud\x12\xb0\x01\n\x1a\x43reateGcpPubSubIntegration\x12&.api.CreateGcpPubSubIntegrationRequest\x1a\x16.google.protobuf.Empty\"R\x82\xd3\xe4\x93\x02L\"G/api/applications/{integration.application_id}/integrations/gcp-pub-sub:\x01*\x12\xa9\x01\n\x17GetGcpPubSubIntegration\x12#.api.GetGcpPubSubIntegrationRequest\x1a$.api.GetGcpPubSubIntegrationResponse\"C\x82\xd3\xe4\x93\x02=\x12;/api/applications/{application_id}/integrations/gcp-pub-sub\x12\xb0\x01\n\x1aUpdateGcpPubSubIntegration\x12&.api.UpdateGcpPubSubIntegrationRequest\x1a\x16.google.protobuf.Empty\"R\x82\xd3\xe4\x93\x02L\x1aG/api/applications/{integration.application_id}/integrations/gcp-pub-sub:\x01*\x12\xa1\x01\n\x1a\x44\x65leteGcpPubSubIntegration\x12&.api.DeleteGcpPubSubIntegrationRequest\x1a\x16.google.protobuf.Empty\"C\x82\xd3\xe4\x93\x02=*;/api/applications/{application_id}/integrations/gcp-pub-sub\x12\xa6\x01\n\x17\x43reateAwsSnsIntegration\x12#.api.CreateAwsSnsIntegrationRequest\x1a\x16.google.protobuf.Empty\"N\x82\xd3\xe4\x93\x02H\"C/api/applications/{integration.application_id}/integrations/aws-sns:\x01*\x12\x9c\x01\n\x14GetAwsSnsIntegration\x12 .api.GetAwsSnsIntegrationRequest\x1a!.api.GetAwsSnsIntegrationResponse\"?\x82\xd3\xe4\x93\x02\x39\x12\x37/api/applications/{application_id}/integrations/aws-sns\x12\xa6\x01\n\x17UpdateAwsSnsIntegration\x12#.api.UpdateAwsSnsIntegrationRequest\x1a\x16.google.protobuf.Empty\"N\x82\xd3\xe4\x93\x02H\x1a\x43/api/applications/{integration.application_id}/integrations/aws-sns:\x01*\x12\x97\x01\n\x17\x44\x65leteAwsSnsIntegration\x12#.api.DeleteAwsSnsIntegrationRequest\x1a\x16.google.protobuf.Empty\"?\x82\xd3\xe4\x93\x02\x39*7/api/applications/{application_id}/integrations/aws-sns\x12\xc2\x01\n CreateAzureServiceBusIntegration\x12,.api.CreateAzureServiceBusIntegrationRequest\x1a\x16.google.protobuf.Empty\"X\x82\xd3\xe4\x93\x02R\"M/api/applications/{integration.application_id}/integrations/azure-service-bus:\x01*\x12\xc1\x01\n\x1dGetAzureServiceBusIntegration\x12).api.GetAzureServiceBusIntegrationRequest\x1a*.api.GetAzureServiceBusIntegrationResponse\"I\x82\xd3\xe4\x93\x02\x43\x12\x41/api/applications/{application_id}/integrations/azure-service-bus\x12\xc2\x01\n UpdateAzureServiceBusIntegration\x12,.api.UpdateAzureServiceBusIntegrationRequest\x1a\x16.google.protobuf.Empty\"X\x82\xd3\xe4\x93\x02R\x1aM/api/applications/{integration.application_id}/integrations/azure-service-bus:\x01*\x12\xb3\x01\n DeleteAzureServiceBusIntegration\x12,.api.DeleteAzureServiceBusIntegrationRequest\x1a\x16.google.protobuf.Empty\"I\x82\xd3\xe4\x93\x02\x43*A/api/applications/{application_id}/integrations/azure-service-bus\x12\xb5\x01\n\x1c\x43reatePilotThingsIntegration\x12(.api.CreatePilotThingsIntegrationRequest\x1a\x16.google.protobuf.Empty\"S\x82\xd3\xe4\x93\x02M\"H/api/applications/{integration.application_id}/integrations/pilot-things:\x01*\x12\xb0\x01\n\x19GetPilotThingsIntegration\x12%.api.GetPilotThingsIntegrationRequest\x1a&.api.GetPilotThingsIntegrationResponse\"D\x82\xd3\xe4\x93\x02>\x12*\n$GetAzureServiceBusIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"]\n%GetAzureServiceBusIntegrationResponse\x12\x34\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1f.api.AzureServiceBusIntegration\"_\n\'UpdateAzureServiceBusIntegrationRequest\x12\x34\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1f.api.AzureServiceBusIntegration\"A\n\'DeleteAzureServiceBusIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"O\n\x16PilotThingsIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12\x0e\n\x06server\x18\x02 \x01(\t\x12\r\n\x05token\x18\x03 \x01(\t\"W\n#CreatePilotThingsIntegrationRequest\x12\x30\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1b.api.PilotThingsIntegration\":\n GetPilotThingsIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"U\n!GetPilotThingsIntegrationResponse\x12\x30\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1b.api.PilotThingsIntegration\"W\n#UpdatePilotThingsIntegrationRequest\x12\x30\n\x0bintegration\x18\x01 \x01(\x0b\x32\x1b.api.PilotThingsIntegration\"=\n#DeletePilotThingsIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"|\n\x10IftttIntegration\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\x15\n\ruplink_values\x18\x03 \x03(\t\x12\x16\n\x0e\x61rbitrary_json\x18\x04 \x01(\x08\x12\x14\n\x0c\x65vent_prefix\x18\x05 \x01(\t\"K\n\x1d\x43reateIftttIntegrationRequest\x12*\n\x0bintegration\x18\x01 \x01(\x0b\x32\x15.api.IftttIntegration\"4\n\x1aGetIftttIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"I\n\x1bGetIftttIntegrationResponse\x12*\n\x0bintegration\x18\x01 \x01(\x0b\x32\x15.api.IftttIntegration\"K\n\x1dUpdateIftttIntegrationRequest\x12*\n\x0bintegration\x18\x01 \x01(\x0b\x32\x15.api.IftttIntegration\"7\n\x1d\x44\x65leteIftttIntegrationRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"I\n/GenerateMqttIntegrationClientCertificateRequest\x12\x16\n\x0e\x61pplication_id\x18\x01 \x01(\t\"\x96\x01\n0GenerateMqttIntegrationClientCertificateResponse\x12\x10\n\x08tls_cert\x18\x01 \x01(\t\x12\x0f\n\x07tls_key\x18\x02 \x01(\t\x12\x0f\n\x07\x63\x61_cert\x18\x03 \x01(\t\x12.\n\nexpires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp*\"\n\x08\x45ncoding\x12\x08\n\x04JSON\x10\x00\x12\x0c\n\x08PROTOBUF\x10\x01*\xbf\x01\n\x0fIntegrationKind\x12\x08\n\x04HTTP\x10\x00\x12\r\n\tINFLUX_DB\x10\x01\x12\x10\n\x0cTHINGS_BOARD\x10\x02\x12\x0e\n\nMY_DEVICES\x10\x03\x12\x0e\n\nLORA_CLOUD\x10\x04\x12\x0f\n\x0bGCP_PUB_SUB\x10\x05\x12\x0b\n\x07\x41WS_SNS\x10\x06\x12\x15\n\x11\x41ZURE_SERVICE_BUS\x10\x07\x12\x10\n\x0cPILOT_THINGS\x10\x08\x12\x0f\n\x0bMQTT_GLOBAL\x10\t\x12\t\n\x05IFTTT\x10\n*?\n\x11InfluxDbPrecision\x12\x06\n\x02NS\x10\x00\x12\x05\n\x01U\x10\x01\x12\x06\n\x02MS\x10\x02\x12\x05\n\x01S\x10\x03\x12\x05\n\x01M\x10\x04\x12\x05\n\x01H\x10\x05*1\n\x0fInfluxDbVersion\x12\x0e\n\nINFLUXDB_1\x10\x00\x12\x0e\n\nINFLUXDB_2\x10\x01\x32\xb8<\n\x12\x41pplicationService\x12\x65\n\x06\x43reate\x12\x1d.api.CreateApplicationRequest\x1a\x1e.api.CreateApplicationResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/api/applications:\x01*\x12^\n\x03Get\x12\x1a.api.GetApplicationRequest\x1a\x1b.api.GetApplicationResponse\"\x1e\x82\xd3\xe4\x93\x02\x18\x12\x16/api/applications/{id}\x12n\n\x06Update\x12\x1d.api.UpdateApplicationRequest\x1a\x16.google.protobuf.Empty\"-\x82\xd3\xe4\x93\x02\'\x1a\"/api/applications/{application.id}:\x01*\x12_\n\x06\x44\x65lete\x12\x1d.api.DeleteApplicationRequest\x1a\x16.google.protobuf.Empty\"\x1e\x82\xd3\xe4\x93\x02\x18*\x16/api/applications/{id}\x12^\n\x04List\x12\x1c.api.ListApplicationsRequest\x1a\x1d.api.ListApplicationsResponse\"\x19\x82\xd3\xe4\x93\x02\x13\x12\x11/api/applications\x12\x88\x01\n\x10ListIntegrations\x12\x1c.api.ListIntegrationsRequest\x1a\x1d.api.ListIntegrationsResponse\"7\x82\xd3\xe4\x93\x02\x31\x12//api/applications/{application_id}/integrations\x12\x9f\x01\n\x15\x43reateHttpIntegration\x12!.api.CreateHttpIntegrationRequest\x1a\x16.google.protobuf.Empty\"K\x82\xd3\xe4\x93\x02\x45\"@/api/applications/{integration.application_id}/integrations/http:\x01*\x12\x93\x01\n\x12GetHttpIntegration\x12\x1e.api.GetHttpIntegrationRequest\x1a\x1f.api.GetHttpIntegrationResponse\"<\x82\xd3\xe4\x93\x02\x36\x12\x34/api/applications/{application_id}/integrations/http\x12\x9f\x01\n\x15UpdateHttpIntegration\x12!.api.UpdateHttpIntegrationRequest\x1a\x16.google.protobuf.Empty\"K\x82\xd3\xe4\x93\x02\x45\x1a@/api/applications/{integration.application_id}/integrations/http:\x01*\x12\x90\x01\n\x15\x44\x65leteHttpIntegration\x12!.api.DeleteHttpIntegrationRequest\x1a\x16.google.protobuf.Empty\"<\x82\xd3\xe4\x93\x02\x36*4/api/applications/{application_id}/integrations/http\x12\xab\x01\n\x19\x43reateInfluxDbIntegration\x12%.api.CreateInfluxDbIntegrationRequest\x1a\x16.google.protobuf.Empty\"O\x82\xd3\xe4\x93\x02I\"D/api/applications/{integration.application_id}/integrations/influxdb:\x01*\x12\xa3\x01\n\x16GetInfluxDbIntegration\x12\".api.GetInfluxDbIntegrationRequest\x1a#.api.GetInfluxDbIntegrationResponse\"@\x82\xd3\xe4\x93\x02:\x12\x38/api/applications/{application_id}/integrations/influxdb\x12\xab\x01\n\x19UpdateInfluxDbIntegration\x12%.api.UpdateInfluxDbIntegrationRequest\x1a\x16.google.protobuf.Empty\"O\x82\xd3\xe4\x93\x02I\x1a\x44/api/applications/{integration.application_id}/integrations/influxdb:\x01*\x12\x9c\x01\n\x19\x44\x65leteInfluxDbIntegration\x12%.api.DeleteInfluxDbIntegrationRequest\x1a\x16.google.protobuf.Empty\"@\x82\xd3\xe4\x93\x02:*8/api/applications/{application_id}/integrations/influxdb\x12\xb4\x01\n\x1c\x43reateThingsBoardIntegration\x12(.api.CreateThingsBoardIntegrationRequest\x1a\x16.google.protobuf.Empty\"R\x82\xd3\xe4\x93\x02L\"G/api/applications/{integration.application_id}/integrations/thingsboard:\x01*\x12\xaf\x01\n\x19GetThingsBoardIntegration\x12%.api.GetThingsBoardIntegrationRequest\x1a&.api.GetThingsBoardIntegrationResponse\"C\x82\xd3\xe4\x93\x02=\x12;/api/applications/{application_id}/integrations/thingsboard\x12\xb4\x01\n\x1cUpdateThingsBoardIntegration\x12(.api.UpdateThingsBoardIntegrationRequest\x1a\x16.google.protobuf.Empty\"R\x82\xd3\xe4\x93\x02L\x1aG/api/applications/{integration.application_id}/integrations/thingsboard:\x01*\x12\xa5\x01\n\x1c\x44\x65leteThingsBoardIntegration\x12(.api.DeleteThingsBoardIntegrationRequest\x1a\x16.google.protobuf.Empty\"C\x82\xd3\xe4\x93\x02=*;/api/applications/{application_id}/integrations/thingsboard\x12\xae\x01\n\x1a\x43reateMyDevicesIntegration\x12&.api.CreateMyDevicesIntegrationRequest\x1a\x16.google.protobuf.Empty\"P\x82\xd3\xe4\x93\x02J\"E/api/applications/{integration.application_id}/integrations/mydevices:\x01*\x12\xa7\x01\n\x17GetMyDevicesIntegration\x12#.api.GetMyDevicesIntegrationRequest\x1a$.api.GetMyDevicesIntegrationResponse\"A\x82\xd3\xe4\x93\x02;\x12\x39/api/applications/{application_id}/integrations/mydevices\x12\xae\x01\n\x1aUpdateMyDevicesIntegration\x12&.api.UpdateMyDevicesIntegrationRequest\x1a\x16.google.protobuf.Empty\"P\x82\xd3\xe4\x93\x02J\x1a\x45/api/applications/{integration.application_id}/integrations/mydevices:\x01*\x12\x9f\x01\n\x1a\x44\x65leteMyDevicesIntegration\x12&.api.DeleteMyDevicesIntegrationRequest\x1a\x16.google.protobuf.Empty\"A\x82\xd3\xe4\x93\x02;*9/api/applications/{application_id}/integrations/mydevices\x12\xae\x01\n\x1a\x43reateLoraCloudIntegration\x12&.api.CreateLoraCloudIntegrationRequest\x1a\x16.google.protobuf.Empty\"P\x82\xd3\xe4\x93\x02J\"E/api/applications/{integration.application_id}/integrations/loracloud:\x01*\x12\xa7\x01\n\x17GetLoraCloudIntegration\x12#.api.GetLoraCloudIntegrationRequest\x1a$.api.GetLoraCloudIntegrationResponse\"A\x82\xd3\xe4\x93\x02;\x12\x39/api/applications/{application_id}/integrations/loracloud\x12\xae\x01\n\x1aUpdateLoraCloudIntegration\x12&.api.UpdateLoraCloudIntegrationRequest\x1a\x16.google.protobuf.Empty\"P\x82\xd3\xe4\x93\x02J\x1a\x45/api/applications/{integration.application_id}/integrations/loracloud:\x01*\x12\x9f\x01\n\x1a\x44\x65leteLoraCloudIntegration\x12&.api.DeleteLoraCloudIntegrationRequest\x1a\x16.google.protobuf.Empty\"A\x82\xd3\xe4\x93\x02;*9/api/applications/{application_id}/integrations/loracloud\x12\xb0\x01\n\x1a\x43reateGcpPubSubIntegration\x12&.api.CreateGcpPubSubIntegrationRequest\x1a\x16.google.protobuf.Empty\"R\x82\xd3\xe4\x93\x02L\"G/api/applications/{integration.application_id}/integrations/gcp-pub-sub:\x01*\x12\xa9\x01\n\x17GetGcpPubSubIntegration\x12#.api.GetGcpPubSubIntegrationRequest\x1a$.api.GetGcpPubSubIntegrationResponse\"C\x82\xd3\xe4\x93\x02=\x12;/api/applications/{application_id}/integrations/gcp-pub-sub\x12\xb0\x01\n\x1aUpdateGcpPubSubIntegration\x12&.api.UpdateGcpPubSubIntegrationRequest\x1a\x16.google.protobuf.Empty\"R\x82\xd3\xe4\x93\x02L\x1aG/api/applications/{integration.application_id}/integrations/gcp-pub-sub:\x01*\x12\xa1\x01\n\x1a\x44\x65leteGcpPubSubIntegration\x12&.api.DeleteGcpPubSubIntegrationRequest\x1a\x16.google.protobuf.Empty\"C\x82\xd3\xe4\x93\x02=*;/api/applications/{application_id}/integrations/gcp-pub-sub\x12\xa6\x01\n\x17\x43reateAwsSnsIntegration\x12#.api.CreateAwsSnsIntegrationRequest\x1a\x16.google.protobuf.Empty\"N\x82\xd3\xe4\x93\x02H\"C/api/applications/{integration.application_id}/integrations/aws-sns:\x01*\x12\x9c\x01\n\x14GetAwsSnsIntegration\x12 .api.GetAwsSnsIntegrationRequest\x1a!.api.GetAwsSnsIntegrationResponse\"?\x82\xd3\xe4\x93\x02\x39\x12\x37/api/applications/{application_id}/integrations/aws-sns\x12\xa6\x01\n\x17UpdateAwsSnsIntegration\x12#.api.UpdateAwsSnsIntegrationRequest\x1a\x16.google.protobuf.Empty\"N\x82\xd3\xe4\x93\x02H\x1a\x43/api/applications/{integration.application_id}/integrations/aws-sns:\x01*\x12\x97\x01\n\x17\x44\x65leteAwsSnsIntegration\x12#.api.DeleteAwsSnsIntegrationRequest\x1a\x16.google.protobuf.Empty\"?\x82\xd3\xe4\x93\x02\x39*7/api/applications/{application_id}/integrations/aws-sns\x12\xc2\x01\n CreateAzureServiceBusIntegration\x12,.api.CreateAzureServiceBusIntegrationRequest\x1a\x16.google.protobuf.Empty\"X\x82\xd3\xe4\x93\x02R\"M/api/applications/{integration.application_id}/integrations/azure-service-bus:\x01*\x12\xc1\x01\n\x1dGetAzureServiceBusIntegration\x12).api.GetAzureServiceBusIntegrationRequest\x1a*.api.GetAzureServiceBusIntegrationResponse\"I\x82\xd3\xe4\x93\x02\x43\x12\x41/api/applications/{application_id}/integrations/azure-service-bus\x12\xc2\x01\n UpdateAzureServiceBusIntegration\x12,.api.UpdateAzureServiceBusIntegrationRequest\x1a\x16.google.protobuf.Empty\"X\x82\xd3\xe4\x93\x02R\x1aM/api/applications/{integration.application_id}/integrations/azure-service-bus:\x01*\x12\xb3\x01\n DeleteAzureServiceBusIntegration\x12,.api.DeleteAzureServiceBusIntegrationRequest\x1a\x16.google.protobuf.Empty\"I\x82\xd3\xe4\x93\x02\x43*A/api/applications/{application_id}/integrations/azure-service-bus\x12\xb5\x01\n\x1c\x43reatePilotThingsIntegration\x12(.api.CreatePilotThingsIntegrationRequest\x1a\x16.google.protobuf.Empty\"S\x82\xd3\xe4\x93\x02M\"H/api/applications/{integration.application_id}/integrations/pilot-things:\x01*\x12\xb0\x01\n\x19GetPilotThingsIntegration\x12%.api.GetPilotThingsIntegrationRequest\x1a&.api.GetPilotThingsIntegrationResponse\"D\x82\xd3\xe4\x93\x02>\x12* None: ...
class IftttIntegration(_message.Message):
- __slots__ = ["application_id", "key", "uplink_values"]
+ __slots__ = ["application_id", "arbitrary_json", "event_prefix", "key", "uplink_values"]
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
+ ARBITRARY_JSON_FIELD_NUMBER: _ClassVar[int]
+ EVENT_PREFIX_FIELD_NUMBER: _ClassVar[int]
KEY_FIELD_NUMBER: _ClassVar[int]
UPLINK_VALUES_FIELD_NUMBER: _ClassVar[int]
application_id: str
+ arbitrary_json: bool
+ event_prefix: str
key: str
uplink_values: _containers.RepeatedScalarFieldContainer[str]
- def __init__(self, application_id: _Optional[str] = ..., key: _Optional[str] = ..., uplink_values: _Optional[_Iterable[str]] = ...) -> None: ...
+ def __init__(self, application_id: _Optional[str] = ..., key: _Optional[str] = ..., uplink_values: _Optional[_Iterable[str]] = ..., arbitrary_json: bool = ..., event_prefix: _Optional[str] = ...) -> None: ...
class InfluxDbIntegration(_message.Message):
__slots__ = ["application_id", "bucket", "db", "endpoint", "organization", "password", "precision", "retention_policy_name", "token", "username", "version"]
diff --git a/api/python/src/chirpstack_api/api/application_pb2_grpc.py b/api/python/src/chirpstack_api/api/application_pb2_grpc.py
index c12f40e5..1ebaa20a 100644
--- a/api/python/src/chirpstack_api/api/application_pb2_grpc.py
+++ b/api/python/src/chirpstack_api/api/application_pb2_grpc.py
@@ -7,7 +7,8 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
class ApplicationServiceStub(object):
- """ApplicationService is the service providing API methods for managing applications.
+ """ApplicationService is the service providing API methods for managing
+ applications.
"""
def __init__(self, channel):
@@ -254,7 +255,8 @@ class ApplicationServiceStub(object):
class ApplicationServiceServicer(object):
- """ApplicationService is the service providing API methods for managing applications.
+ """ApplicationService is the service providing API methods for managing
+ applications.
"""
def Create(self, request, context):
@@ -832,7 +834,8 @@ def add_ApplicationServiceServicer_to_server(servicer, server):
# This class is part of an EXPERIMENTAL API.
class ApplicationService(object):
- """ApplicationService is the service providing API methods for managing applications.
+ """ApplicationService is the service providing API methods for managing
+ applications.
"""
@staticmethod
diff --git a/api/rust/proto/chirpstack/api/application.proto b/api/rust/proto/chirpstack/api/application.proto
index 2055ce09..c0c98cc5 100644
--- a/api/rust/proto/chirpstack/api/application.proto
+++ b/api/rust/proto/chirpstack/api/application.proto
@@ -12,1006 +12,1081 @@ import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
-// ApplicationService is the service providing API methods for managing applications.
+// ApplicationService is the service providing API methods for managing
+// applications.
service ApplicationService {
- // Create creates the given application.
- rpc Create(CreateApplicationRequest) returns (CreateApplicationResponse) {
- option(google.api.http) = {
- post: "/api/applications"
- body: "*"
- };
- }
+ // Create creates the given application.
+ rpc Create(CreateApplicationRequest) returns (CreateApplicationResponse) {
+ option (google.api.http) = {
+ post : "/api/applications"
+ body : "*"
+ };
+ }
- // Get the application for the given ID.
- rpc Get(GetApplicationRequest) returns (GetApplicationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{id}"
- };
- }
+ // Get the application for the given ID.
+ rpc Get(GetApplicationRequest) returns (GetApplicationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{id}"
+ };
+ }
- // Update updates the given application.
- rpc Update(UpdateApplicationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{application.id}"
- body: "*"
- };
- }
+ // Update updates the given application.
+ rpc Update(UpdateApplicationRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{application.id}"
+ body : "*"
+ };
+ }
- // Delete the application for the given ID.
- rpc Delete(DeleteApplicationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{id}"
- };
- }
+ // Delete the application for the given ID.
+ rpc Delete(DeleteApplicationRequest) returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{id}"
+ };
+ }
- // Get the list of applications.
- rpc List(ListApplicationsRequest) returns (ListApplicationsResponse) {
- option(google.api.http) = {
- get: "/api/applications"
- };
- }
+ // Get the list of applications.
+ rpc List(ListApplicationsRequest) returns (ListApplicationsResponse) {
+ option (google.api.http) = {
+ get : "/api/applications"
+ };
+ }
- // List all configured integrations.
- rpc ListIntegrations(ListIntegrationsRequest) returns (ListIntegrationsResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations"
- };
- }
+ // List all configured integrations.
+ rpc ListIntegrations(ListIntegrationsRequest)
+ returns (ListIntegrationsResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations"
+ };
+ }
- // Create HTTP integration.
- rpc CreateHttpIntegration(CreateHttpIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/http"
- body: "*"
- };
- }
+ // Create HTTP integration.
+ rpc CreateHttpIntegration(CreateHttpIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/http"
+ body : "*"
+ };
+ }
- // Get the configured HTTP integration.
- rpc GetHttpIntegration(GetHttpIntegrationRequest) returns (GetHttpIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/http"
- };
- }
+ // Get the configured HTTP integration.
+ rpc GetHttpIntegration(GetHttpIntegrationRequest)
+ returns (GetHttpIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/http"
+ };
+ }
- // Update the HTTP integration.
- rpc UpdateHttpIntegration(UpdateHttpIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/http"
- body: "*"
- };
- }
+ // Update the HTTP integration.
+ rpc UpdateHttpIntegration(UpdateHttpIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/http"
+ body : "*"
+ };
+ }
- // Delete the HTTP integration.
- rpc DeleteHttpIntegration(DeleteHttpIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/http"
- };
- }
+ // Delete the HTTP integration.
+ rpc DeleteHttpIntegration(DeleteHttpIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/http"
+ };
+ }
- // Create InfluxDb integration.
- rpc CreateInfluxDbIntegration(CreateInfluxDbIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/influxdb"
- body: "*"
- };
- }
+ // Create InfluxDb integration.
+ rpc CreateInfluxDbIntegration(CreateInfluxDbIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "influxdb"
+ body : "*"
+ };
+ }
- // Get InfluxDb integration.
- rpc GetInfluxDbIntegration(GetInfluxDbIntegrationRequest) returns (GetInfluxDbIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/influxdb"
- };
- }
+ // Get InfluxDb integration.
+ rpc GetInfluxDbIntegration(GetInfluxDbIntegrationRequest)
+ returns (GetInfluxDbIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/influxdb"
+ };
+ }
- // Update InfluxDb integration.
- rpc UpdateInfluxDbIntegration(UpdateInfluxDbIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/influxdb"
- body: "*"
- };
- }
+ // Update InfluxDb integration.
+ rpc UpdateInfluxDbIntegration(UpdateInfluxDbIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "influxdb"
+ body : "*"
+ };
+ }
- // Delete InfluxDb integration.
- rpc DeleteInfluxDbIntegration(DeleteInfluxDbIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/influxdb"
- };
- }
+ // Delete InfluxDb integration.
+ rpc DeleteInfluxDbIntegration(DeleteInfluxDbIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/influxdb"
+ };
+ }
- // Create ThingsBoard integration.
- rpc CreateThingsBoardIntegration(CreateThingsBoardIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/thingsboard"
- body: "*"
- };
- }
+ // Create ThingsBoard integration.
+ rpc CreateThingsBoardIntegration(CreateThingsBoardIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "thingsboard"
+ body : "*"
+ };
+ }
- // Get ThingsBoard integration.
- rpc GetThingsBoardIntegration(GetThingsBoardIntegrationRequest) returns (GetThingsBoardIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/thingsboard"
- };
- }
+ // Get ThingsBoard integration.
+ rpc GetThingsBoardIntegration(GetThingsBoardIntegrationRequest)
+ returns (GetThingsBoardIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/thingsboard"
+ };
+ }
- // Update ThingsBoard integration.
- rpc UpdateThingsBoardIntegration(UpdateThingsBoardIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/thingsboard"
- body: "*"
- };
- }
+ // Update ThingsBoard integration.
+ rpc UpdateThingsBoardIntegration(UpdateThingsBoardIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "thingsboard"
+ body : "*"
+ };
+ }
- // Delete ThingsBoard integration.
- rpc DeleteThingsBoardIntegration(DeleteThingsBoardIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/thingsboard"
- };
- }
+ // Delete ThingsBoard integration.
+ rpc DeleteThingsBoardIntegration(DeleteThingsBoardIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/thingsboard"
+ };
+ }
- // Create myDevices integration.
- rpc CreateMyDevicesIntegration(CreateMyDevicesIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/mydevices"
- body: "*"
- };
- }
+ // Create myDevices integration.
+ rpc CreateMyDevicesIntegration(CreateMyDevicesIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "mydevices"
+ body : "*"
+ };
+ }
- // Get myDevices integration.
- rpc GetMyDevicesIntegration(GetMyDevicesIntegrationRequest) returns (GetMyDevicesIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/mydevices"
- };
- }
+ // Get myDevices integration.
+ rpc GetMyDevicesIntegration(GetMyDevicesIntegrationRequest)
+ returns (GetMyDevicesIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/mydevices"
+ };
+ }
- // Update myDevices integration.
- rpc UpdateMyDevicesIntegration(UpdateMyDevicesIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/mydevices"
- body: "*"
- };
- }
+ // Update myDevices integration.
+ rpc UpdateMyDevicesIntegration(UpdateMyDevicesIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "mydevices"
+ body : "*"
+ };
+ }
- // Delete myDevices integration.
- rpc DeleteMyDevicesIntegration(DeleteMyDevicesIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/mydevices"
- };
- }
+ // Delete myDevices integration.
+ rpc DeleteMyDevicesIntegration(DeleteMyDevicesIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/mydevices"
+ };
+ }
- // Create LoRaCloud integration.
- rpc CreateLoraCloudIntegration(CreateLoraCloudIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/loracloud"
- body: "*"
- };
- }
+ // Create LoRaCloud integration.
+ rpc CreateLoraCloudIntegration(CreateLoraCloudIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "loracloud"
+ body : "*"
+ };
+ }
- // Get LoRaCloud integration.
- rpc GetLoraCloudIntegration(GetLoraCloudIntegrationRequest) returns (GetLoraCloudIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/loracloud"
- };
- }
+ // Get LoRaCloud integration.
+ rpc GetLoraCloudIntegration(GetLoraCloudIntegrationRequest)
+ returns (GetLoraCloudIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/loracloud"
+ };
+ }
- // Update LoRaCloud integration.
- rpc UpdateLoraCloudIntegration(UpdateLoraCloudIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/loracloud"
- body: "*"
- };
- }
+ // Update LoRaCloud integration.
+ rpc UpdateLoraCloudIntegration(UpdateLoraCloudIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "loracloud"
+ body : "*"
+ };
+ }
- // Delete LoRaCloud integration.
- rpc DeleteLoraCloudIntegration(DeleteLoraCloudIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/loracloud"
- };
- }
+ // Delete LoRaCloud integration.
+ rpc DeleteLoraCloudIntegration(DeleteLoraCloudIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/loracloud"
+ };
+ }
- // Create GCP Pub/Sub integration.
- rpc CreateGcpPubSubIntegration(CreateGcpPubSubIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/gcp-pub-sub"
- body: "*"
- };
- }
+ // Create GCP Pub/Sub integration.
+ rpc CreateGcpPubSubIntegration(CreateGcpPubSubIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "gcp-pub-sub"
+ body : "*"
+ };
+ }
- // Get GCP Pub/Sub integration.
- rpc GetGcpPubSubIntegration(GetGcpPubSubIntegrationRequest) returns (GetGcpPubSubIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/gcp-pub-sub"
- };
- }
+ // Get GCP Pub/Sub integration.
+ rpc GetGcpPubSubIntegration(GetGcpPubSubIntegrationRequest)
+ returns (GetGcpPubSubIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/gcp-pub-sub"
+ };
+ }
- // Update GCP Pub/Sub integration.
- rpc UpdateGcpPubSubIntegration(UpdateGcpPubSubIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/gcp-pub-sub"
- body: "*"
- };
- }
+ // Update GCP Pub/Sub integration.
+ rpc UpdateGcpPubSubIntegration(UpdateGcpPubSubIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "gcp-pub-sub"
+ body : "*"
+ };
+ }
- // Delete GCP Pub/Sub integration.
- rpc DeleteGcpPubSubIntegration(DeleteGcpPubSubIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/gcp-pub-sub"
- };
- }
+ // Delete GCP Pub/Sub integration.
+ rpc DeleteGcpPubSubIntegration(DeleteGcpPubSubIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/gcp-pub-sub"
+ };
+ }
- // Create AWS SNS integration.
- rpc CreateAwsSnsIntegration(CreateAwsSnsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/aws-sns"
- body: "*"
- };
- }
+ // Create AWS SNS integration.
+ rpc CreateAwsSnsIntegration(CreateAwsSnsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "aws-sns"
+ body : "*"
+ };
+ }
- // Get AWS SNS integration.
- rpc GetAwsSnsIntegration(GetAwsSnsIntegrationRequest) returns (GetAwsSnsIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/aws-sns"
- };
- }
+ // Get AWS SNS integration.
+ rpc GetAwsSnsIntegration(GetAwsSnsIntegrationRequest)
+ returns (GetAwsSnsIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/aws-sns"
+ };
+ }
- // Update AWS SNS integration.
- rpc UpdateAwsSnsIntegration(UpdateAwsSnsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/aws-sns"
- body: "*"
- };
- }
+ // Update AWS SNS integration.
+ rpc UpdateAwsSnsIntegration(UpdateAwsSnsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "aws-sns"
+ body : "*"
+ };
+ }
- // Delete AWS SNS integration.
- rpc DeleteAwsSnsIntegration(DeleteAwsSnsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/aws-sns"
- };
- }
+ // Delete AWS SNS integration.
+ rpc DeleteAwsSnsIntegration(DeleteAwsSnsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/aws-sns"
+ };
+ }
- // Create Azure Service-Bus integration.
- rpc CreateAzureServiceBusIntegration(CreateAzureServiceBusIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/azure-service-bus"
- body: "*"
- };
- }
+ // Create Azure Service-Bus integration.
+ rpc CreateAzureServiceBusIntegration(CreateAzureServiceBusIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "azure-service-bus"
+ body : "*"
+ };
+ }
- // Get Azure Service-Bus integration.
- rpc GetAzureServiceBusIntegration(GetAzureServiceBusIntegrationRequest) returns (GetAzureServiceBusIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/azure-service-bus"
- };
- }
+ // Get Azure Service-Bus integration.
+ rpc GetAzureServiceBusIntegration(GetAzureServiceBusIntegrationRequest)
+ returns (GetAzureServiceBusIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/azure-service-bus"
+ };
+ }
- // Update Azure Service-Bus integration.
- rpc UpdateAzureServiceBusIntegration(UpdateAzureServiceBusIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/azure-service-bus"
- body: "*"
- };
- }
+ // Update Azure Service-Bus integration.
+ rpc UpdateAzureServiceBusIntegration(UpdateAzureServiceBusIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "azure-service-bus"
+ body : "*"
+ };
+ }
- // Delete Azure Service-Bus integration.
- rpc DeleteAzureServiceBusIntegration(DeleteAzureServiceBusIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/azure-service-bus"
- };
- }
+ // Delete Azure Service-Bus integration.
+ rpc DeleteAzureServiceBusIntegration(DeleteAzureServiceBusIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/"
+ "azure-service-bus"
+ };
+ }
- // Create Pilot Things integration.
- rpc CreatePilotThingsIntegration(CreatePilotThingsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/pilot-things"
- body: "*"
- };
- }
+ // Create Pilot Things integration.
+ rpc CreatePilotThingsIntegration(CreatePilotThingsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/"
+ "pilot-things"
+ body : "*"
+ };
+ }
- // Get Pilot Things integration.
- rpc GetPilotThingsIntegration(GetPilotThingsIntegrationRequest) returns (GetPilotThingsIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/pilot-things"
- };
- }
+ // Get Pilot Things integration.
+ rpc GetPilotThingsIntegration(GetPilotThingsIntegrationRequest)
+ returns (GetPilotThingsIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/pilot-things"
+ };
+ }
- // Update Pilot Things integration.
- rpc UpdatePilotThingsIntegration(UpdatePilotThingsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/pilot-things"
- body: "*"
- };
- }
+ // Update Pilot Things integration.
+ rpc UpdatePilotThingsIntegration(UpdatePilotThingsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/"
+ "pilot-things"
+ body : "*"
+ };
+ }
- // Delete Pilot Things integration.
- rpc DeletePilotThingsIntegration(DeletePilotThingsIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/pilot-things"
- };
- }
+ // Delete Pilot Things integration.
+ rpc DeletePilotThingsIntegration(DeletePilotThingsIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/pilot-things"
+ };
+ }
- // Create IFTTT integration.
- rpc CreateIftttIntegration(CreateIftttIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- post: "/api/applications/{integration.application_id}/integrations/ifttt"
- body: "*"
- };
- }
+ // Create IFTTT integration.
+ rpc CreateIftttIntegration(CreateIftttIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ post : "/api/applications/{integration.application_id}/integrations/ifttt"
+ body : "*"
+ };
+ }
- // Get IFTTT integration.
- rpc GetIftttIntegration(GetIftttIntegrationRequest) returns (GetIftttIntegrationResponse) {
- option(google.api.http) = {
- get: "/api/applications/{application_id}/integrations/ifttt"
- };
- }
+ // Get IFTTT integration.
+ rpc GetIftttIntegration(GetIftttIntegrationRequest)
+ returns (GetIftttIntegrationResponse) {
+ option (google.api.http) = {
+ get : "/api/applications/{application_id}/integrations/ifttt"
+ };
+ }
- // Update IFTTT integration.
- rpc UpdateIftttIntegration(UpdateIftttIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- put: "/api/applications/{integration.application_id}/integrations/ifttt"
- body: "*"
- };
- }
+ // Update IFTTT integration.
+ rpc UpdateIftttIntegration(UpdateIftttIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ put : "/api/applications/{integration.application_id}/integrations/ifttt"
+ body : "*"
+ };
+ }
- // Delete IFTTT integration.
- rpc DeleteIftttIntegration(DeleteIftttIntegrationRequest) returns (google.protobuf.Empty) {
- option(google.api.http) = {
- delete: "/api/applications/{application_id}/integrations/ifttt"
- };
- }
+ // Delete IFTTT integration.
+ rpc DeleteIftttIntegration(DeleteIftttIntegrationRequest)
+ returns (google.protobuf.Empty) {
+ option (google.api.http) = {
+ delete : "/api/applications/{application_id}/integrations/ifttt"
+ };
+ }
- // Generates application ID specific client-certificate.
- rpc GenerateMqttIntegrationClientCertificate(GenerateMqttIntegrationClientCertificateRequest) returns (GenerateMqttIntegrationClientCertificateResponse) {
- option(google.api.http) = {
- post: "/api/applications/{application_id}/integrations/mqtt/certificate"
- };
- }
+ // Generates application ID specific client-certificate.
+ rpc GenerateMqttIntegrationClientCertificate(
+ GenerateMqttIntegrationClientCertificateRequest)
+ returns (GenerateMqttIntegrationClientCertificateResponse) {
+ option (google.api.http) = {
+ post : "/api/applications/{application_id}/integrations/mqtt/certificate"
+ };
+ }
}
enum Encoding {
- JSON = 0;
- PROTOBUF = 1;
+ JSON = 0;
+ PROTOBUF = 1;
}
enum IntegrationKind {
- HTTP = 0;
- INFLUX_DB = 1;
- THINGS_BOARD = 2;
- MY_DEVICES = 3;
- LORA_CLOUD = 4;
- GCP_PUB_SUB = 5;
- AWS_SNS = 6;
- AZURE_SERVICE_BUS = 7;
- PILOT_THINGS = 8;
- MQTT_GLOBAL = 9;
- IFTTT = 10;
+ HTTP = 0;
+ INFLUX_DB = 1;
+ THINGS_BOARD = 2;
+ MY_DEVICES = 3;
+ LORA_CLOUD = 4;
+ GCP_PUB_SUB = 5;
+ AWS_SNS = 6;
+ AZURE_SERVICE_BUS = 7;
+ PILOT_THINGS = 8;
+ MQTT_GLOBAL = 9;
+ IFTTT = 10;
}
message Application {
- // Application ID (UUID).
- // Note: on create this will be automatically generated.
- string id = 1;
+ // Application ID (UUID).
+ // Note: on create this will be automatically generated.
+ string id = 1;
- // Application name.
- string name = 2;
+ // Application name.
+ string name = 2;
- // Application description.
- string description = 3;
+ // Application description.
+ string description = 3;
- // Tenant ID (UUID).
- string tenant_id = 4;
+ // Tenant ID (UUID).
+ string tenant_id = 4;
}
message ApplicationListItem {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
- // Created at timestamp.
- google.protobuf.Timestamp created_at = 2;
+ // Created at timestamp.
+ google.protobuf.Timestamp created_at = 2;
- // Last update timestamp.
- google.protobuf.Timestamp updated_at = 3;
+ // Last update timestamp.
+ google.protobuf.Timestamp updated_at = 3;
- // Application name.
- string name = 4;
-
- // Application description.
- string description = 5;
+ // Application name.
+ string name = 4;
+
+ // Application description.
+ string description = 5;
}
message CreateApplicationRequest {
- // Application object to create.
- Application application = 1;
+ // Application object to create.
+ Application application = 1;
}
message CreateApplicationResponse {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
}
message GetApplicationRequest {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
}
message GetApplicationResponse {
- // Application object.
- Application application = 1;
+ // Application object.
+ Application application = 1;
- // Created at timestamp.
- google.protobuf.Timestamp created_at = 2;
+ // Created at timestamp.
+ google.protobuf.Timestamp created_at = 2;
- // Last update timestamp.
- google.protobuf.Timestamp updated_at = 3;
+ // Last update timestamp.
+ google.protobuf.Timestamp updated_at = 3;
- // Measurement keys.
- // This contains the measurement keys from all the device-profiles that
- // are used by the devices under this application.
- repeated string measurement_keys = 4;
+ // Measurement keys.
+ // This contains the measurement keys from all the device-profiles that
+ // are used by the devices under this application.
+ repeated string measurement_keys = 4;
}
message UpdateApplicationRequest {
- // Application object.
- Application application = 1;
+ // Application object.
+ Application application = 1;
}
message DeleteApplicationRequest {
- // Application ID (UUID).
- string id = 1;
+ // Application ID (UUID).
+ string id = 1;
}
message ListApplicationsRequest {
- // Max number of applications to return in the result-set.
- uint32 limit = 1;
+ // Max number of applications to return in the result-set.
+ uint32 limit = 1;
- // Offset in the result-set (for pagination).
- uint32 offset = 2;
+ // Offset in the result-set (for pagination).
+ uint32 offset = 2;
- // If set, the given string will be used to search on name (optional).
- string search = 3;
+ // If set, the given string will be used to search on name (optional).
+ string search = 3;
- // Tenant ID to list the applications for.
- string tenant_id = 4;
+ // Tenant ID to list the applications for.
+ string tenant_id = 4;
}
message ListApplicationsResponse {
- // Total number of applications.
- uint32 total_count = 1;
+ // Total number of applications.
+ uint32 total_count = 1;
- // Result-set.
- repeated ApplicationListItem result = 2;
+ // Result-set.
+ repeated ApplicationListItem result = 2;
}
message ListIntegrationsRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message IntegrationListItem {
- // Integration kind.
- IntegrationKind kind = 1;
+ // Integration kind.
+ IntegrationKind kind = 1;
}
message ListIntegrationsResponse {
- // Total number of integrations available within the result-set.
- uint32 total_count = 1;
+ // Total number of integrations available within the result-set.
+ uint32 total_count = 1;
- // Integrations within result-set.
- repeated IntegrationListItem result = 2;
+ // Integrations within result-set.
+ repeated IntegrationListItem result = 2;
}
message HttpIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // HTTP headers to set when making requests.
- map headers = 2;
+ // HTTP headers to set when making requests.
+ map headers = 2;
- // Payload encoding.
- Encoding encoding = 3;
+ // Payload encoding.
+ Encoding encoding = 3;
- // Event endpoint URL.
- // The HTTP integration will POST all events to this enpoint. The request
- // will contain a query parameters "event" containing the type of the
- // event.
- string event_endpoint_url = 4;
+ // Event endpoint URL.
+ // The HTTP integration will POST all events to this enpoint. The request
+ // will contain a query parameters "event" containing the type of the
+ // event.
+ string event_endpoint_url = 4;
}
message CreateHttpIntegrationRequest {
- // Integration object to create.
- HttpIntegration integration = 1;
+ // Integration object to create.
+ HttpIntegration integration = 1;
}
message GetHttpIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetHttpIntegrationResponse {
- // Integration object.
- HttpIntegration integration = 1;
+ // Integration object.
+ HttpIntegration integration = 1;
}
message UpdateHttpIntegrationRequest {
- // Integration object to update.
- HttpIntegration integration = 1;
+ // Integration object to update.
+ HttpIntegration integration = 1;
}
message DeleteHttpIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
enum InfluxDbPrecision {
- NS = 0;
- U = 1;
- MS = 2;
- S = 3;
- M = 4;
- H = 5;
+ NS = 0;
+ U = 1;
+ MS = 2;
+ S = 3;
+ M = 4;
+ H = 5;
}
enum InfluxDbVersion {
- INFLUXDB_1 = 0;
- INFLUXDB_2 = 1;
+ INFLUXDB_1 = 0;
+ INFLUXDB_2 = 1;
}
message InfluxDbIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // InfluxDb API write endpoint (e.g. http://localhost:8086/write).
- string endpoint = 2;
+ // InfluxDb API write endpoint (e.g. http://localhost:8086/write).
+ string endpoint = 2;
- // InfluxDb database name. (InfluxDb v1)
- string db = 3;
+ // InfluxDb database name. (InfluxDb v1)
+ string db = 3;
- // InfluxDb username. (InfluxDb v1)
- string username = 4;
+ // InfluxDb username. (InfluxDb v1)
+ string username = 4;
- // InfluxDb password. (InfluxDb v1)
- string password = 5;
+ // InfluxDb password. (InfluxDb v1)
+ string password = 5;
- // InfluxDb retention policy name. (InfluxDb v1)
- string retention_policy_name = 6;
+ // InfluxDb retention policy name. (InfluxDb v1)
+ string retention_policy_name = 6;
- // InfluxDb timestamp precision (InfluxDb v1).
- InfluxDbPrecision precision = 7;
+ // InfluxDb timestamp precision (InfluxDb v1).
+ InfluxDbPrecision precision = 7;
- // InfluxDb version.
- InfluxDbVersion version = 8;
+ // InfluxDb version.
+ InfluxDbVersion version = 8;
- // Token. (InfluxDb v2)
- string token = 9;
+ // Token. (InfluxDb v2)
+ string token = 9;
- // Organization. (InfluxDb v2)
- string organization = 10;
+ // Organization. (InfluxDb v2)
+ string organization = 10;
- // Bucket. (InfluxDb v2)
- string bucket = 11;
+ // Bucket. (InfluxDb v2)
+ string bucket = 11;
}
message CreateInfluxDbIntegrationRequest {
- // Integration object to create.
- InfluxDbIntegration integration = 1;
+ // Integration object to create.
+ InfluxDbIntegration integration = 1;
}
message GetInfluxDbIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetInfluxDbIntegrationResponse {
- // Integration object.
- InfluxDbIntegration integration = 1;
+ // Integration object.
+ InfluxDbIntegration integration = 1;
}
message UpdateInfluxDbIntegrationRequest {
- // Integration object to update.
- InfluxDbIntegration integration = 1;
+ // Integration object to update.
+ InfluxDbIntegration integration = 1;
}
message DeleteInfluxDbIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message ThingsBoardIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // ThingsBoard server endpoint, e.g. https://example.com
- string server = 2;
+ // ThingsBoard server endpoint, e.g. https://example.com
+ string server = 2;
}
message CreateThingsBoardIntegrationRequest {
- // Integration object to create.
- ThingsBoardIntegration integration = 1;
+ // Integration object to create.
+ ThingsBoardIntegration integration = 1;
}
message GetThingsBoardIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetThingsBoardIntegrationResponse {
- // Integration object.
- ThingsBoardIntegration integration = 1;
+ // Integration object.
+ ThingsBoardIntegration integration = 1;
}
message UpdateThingsBoardIntegrationRequest {
- // Integration object to update.
- ThingsBoardIntegration integration = 1;
+ // Integration object to update.
+ ThingsBoardIntegration integration = 1;
}
message DeleteThingsBoardIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message MyDevicesIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // myDevices API endpoint.
- string endpoint = 2;
+ // myDevices API endpoint.
+ string endpoint = 2;
}
message CreateMyDevicesIntegrationRequest {
- // Integration object to create.
- MyDevicesIntegration integration = 1;
+ // Integration object to create.
+ MyDevicesIntegration integration = 1;
}
message GetMyDevicesIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetMyDevicesIntegrationResponse {
- // Integration object.
- MyDevicesIntegration integration = 1;
+ // Integration object.
+ MyDevicesIntegration integration = 1;
}
message UpdateMyDevicesIntegrationRequest {
- // Integration object to update.
- MyDevicesIntegration integration = 1;
+ // Integration object to update.
+ MyDevicesIntegration integration = 1;
}
message DeleteMyDevicesIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message LoraCloudIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Modem & Geolocation Services configuration.
- LoraCloudModemGeolocationServices modem_geolocation_services = 2;
+ // Modem & Geolocation Services configuration.
+ LoraCloudModemGeolocationServices modem_geolocation_services = 2;
}
message LoraCloudModemGeolocationServices {
- // API token.
- string token = 1;
+ // API token.
+ string token = 1;
- // Device implements Modem / Modem-E stack.
- bool modem_enabled = 2;
+ // Device implements Modem / Modem-E stack.
+ bool modem_enabled = 2;
- // Forward FPorts.
- // Forward uplink messages matching the given FPorts to the MGS.
- repeated uint32 forward_f_ports = 16;
+ // Forward FPorts.
+ // Forward uplink messages matching the given FPorts to the MGS.
+ repeated uint32 forward_f_ports = 16;
- // Use rx time for GNSS resolving.
- // In case this is set to true, the MGS resolver will use the RX time of the
- // network instead of the timestamp included in the LR1110 payload.
- bool gnss_use_rx_time = 5;
+ // Use rx time for GNSS resolving.
+ // In case this is set to true, the MGS resolver will use the RX time of the
+ // network instead of the timestamp included in the LR1110 payload.
+ bool gnss_use_rx_time = 5;
- // Use gateway location for GNSS resolving.
- // In the case this is set to true, ChirpStack will provide the location of
- // one of the gateways to the MGS resolver to aid the resolving process.
- // Disable this in case the gateway location is not accurate / incorrectly
- // configured as an incorrect location will cause the resolver to return an
- // error.
- bool gnss_use_gateway_location = 17;
+ // Use gateway location for GNSS resolving.
+ // In the case this is set to true, ChirpStack will provide the location of
+ // one of the gateways to the MGS resolver to aid the resolving process.
+ // Disable this in case the gateway location is not accurate / incorrectly
+ // configured as an incorrect location will cause the resolver to return an
+ // error.
+ bool gnss_use_gateway_location = 17;
- // Parse TLV records.
- // If enabled, stream records (expected in TLV format) are scanned for GNSS
- // data (0x06 or 0x07). If found, ChirpStack will make an additional
- // geolocation call to the MGS API for resolving the location of the detected
- // payload.
- bool parse_tlv = 6;
+ // Parse TLV records.
+ // If enabled, stream records (expected in TLV format) are scanned for GNSS
+ // data (0x06 or 0x07). If found, ChirpStack will make an additional
+ // geolocation call to the MGS API for resolving the location of the detected
+ // payload.
+ bool parse_tlv = 6;
- // Geolocation buffer TTL (in seconds).
- // If > 0, uplink RX meta-data will be stored in a buffer so that
- // the meta-data of multiple uplinks can be used for geolocation.
- uint32 geolocation_buffer_ttl = 7;
+ // Geolocation buffer TTL (in seconds).
+ // If > 0, uplink RX meta-data will be stored in a buffer so that
+ // the meta-data of multiple uplinks can be used for geolocation.
+ uint32 geolocation_buffer_ttl = 7;
- // Geolocation minimum buffer size.
- // If > 0, geolocation will only be performed when the buffer has
- // at least the given size.
- uint32 geolocation_min_buffer_size = 8;
+ // Geolocation minimum buffer size.
+ // If > 0, geolocation will only be performed when the buffer has
+ // at least the given size.
+ uint32 geolocation_min_buffer_size = 8;
- // TDOA based geolocation is enabled.
- bool geolocation_tdoa = 9;
+ // TDOA based geolocation is enabled.
+ bool geolocation_tdoa = 9;
- // RSSI based geolocation is enabled.
- bool geolocation_rssi = 10;
+ // RSSI based geolocation is enabled.
+ bool geolocation_rssi = 10;
- // GNSS based geolocation is enabled (LR1110).
- bool geolocation_gnss = 11;
+ // GNSS based geolocation is enabled (LR1110).
+ bool geolocation_gnss = 11;
- // GNSS payload field.
- // This holds the name of the field in the decoded payload object which
- // contains the GNSS payload bytes (as HEX string).
- string geolocation_gnss_payload_field = 12;
+ // GNSS payload field.
+ // This holds the name of the field in the decoded payload object which
+ // contains the GNSS payload bytes (as HEX string).
+ string geolocation_gnss_payload_field = 12;
- // GNSS use RX time.
- // In case this is set to true, the resolver will use the RX time of the
- // network instead of the timestamp included in the LR1110 payload.
- bool geolocation_gnss_use_rx_time = 13;
+ // GNSS use RX time.
+ // In case this is set to true, the resolver will use the RX time of the
+ // network instead of the timestamp included in the LR1110 payload.
+ bool geolocation_gnss_use_rx_time = 13;
- // Wifi based geolocation is enabled.
- bool geolocation_wifi = 14;
+ // Wifi based geolocation is enabled.
+ bool geolocation_wifi = 14;
- // Wifi payload field.
- // This holds the name of the field in the decoded payload object which
- // contains an array of objects with the following fields:
- // * macAddress - e.g. 01:23:45:67:89:ab
- // * signalStrength - e.g. -51 (optional)
- string geolocation_wifi_payload_field = 15;
+ // Wifi payload field.
+ // This holds the name of the field in the decoded payload object which
+ // contains an array of objects with the following fields:
+ // * macAddress - e.g. 01:23:45:67:89:ab
+ // * signalStrength - e.g. -51 (optional)
+ string geolocation_wifi_payload_field = 15;
}
message CreateLoraCloudIntegrationRequest {
- // Integration object to create.
- LoraCloudIntegration integration = 1;
+ // Integration object to create.
+ LoraCloudIntegration integration = 1;
}
message GetLoraCloudIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetLoraCloudIntegrationResponse {
- // Integration object.
- LoraCloudIntegration integration = 1;
+ // Integration object.
+ LoraCloudIntegration integration = 1;
}
message UpdateLoraCloudIntegrationRequest {
- // Integration object to update.
- LoraCloudIntegration integration = 1;
+ // Integration object to update.
+ LoraCloudIntegration integration = 1;
}
message DeleteLoraCloudIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GcpPubSubIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Encoding.
- Encoding encoding = 2;
+ // Encoding.
+ Encoding encoding = 2;
- // Credentials file.
- // This IAM service-account credentials file (JSON) must have the following Pub/Sub roles:
- // * Pub/Sub Publisher
- string credentials_file = 3;
+ // Credentials file.
+ // This IAM service-account credentials file (JSON) must have the following
+ // Pub/Sub roles:
+ // * Pub/Sub Publisher
+ string credentials_file = 3;
- // Project ID.
- string project_id = 4;
+ // Project ID.
+ string project_id = 4;
- // Topic name.
- // This is the name of the Pub/Sub topic.
- string topic_name = 5;
+ // Topic name.
+ // This is the name of the Pub/Sub topic.
+ string topic_name = 5;
}
message CreateGcpPubSubIntegrationRequest {
- // Integration object to create.
- GcpPubSubIntegration integration = 1;
+ // Integration object to create.
+ GcpPubSubIntegration integration = 1;
}
message GetGcpPubSubIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetGcpPubSubIntegrationResponse {
- // Integration object.
- GcpPubSubIntegration integration = 1;
+ // Integration object.
+ GcpPubSubIntegration integration = 1;
}
message UpdateGcpPubSubIntegrationRequest {
- // Integration object to update.
- GcpPubSubIntegration integration = 1;
+ // Integration object to update.
+ GcpPubSubIntegration integration = 1;
}
message DeleteGcpPubSubIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message AwsSnsIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Encoding.
- Encoding encoding = 2;
+ // Encoding.
+ Encoding encoding = 2;
- // AWS region.
- string region = 3;
+ // AWS region.
+ string region = 3;
- // AWS Access Key ID.
- string access_key_id = 4;
+ // AWS Access Key ID.
+ string access_key_id = 4;
- // AWS Secret Access Key.
- string secret_access_key = 5;
+ // AWS Secret Access Key.
+ string secret_access_key = 5;
- // Topic ARN.
- string topic_arn = 6;
+ // Topic ARN.
+ string topic_arn = 6;
}
message CreateAwsSnsIntegrationRequest {
- // Integration object to create.
- AwsSnsIntegration integration = 1;
+ // Integration object to create.
+ AwsSnsIntegration integration = 1;
}
message GetAwsSnsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetAwsSnsIntegrationResponse {
- // Integration object.
- AwsSnsIntegration integration = 1;
+ // Integration object.
+ AwsSnsIntegration integration = 1;
}
message UpdateAwsSnsIntegrationRequest {
- // Integration object to update.
- AwsSnsIntegration integration = 1;
+ // Integration object to update.
+ AwsSnsIntegration integration = 1;
}
message DeleteAwsSnsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message AzureServiceBusIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Encoding.
- Encoding encoding = 2;
+ // Encoding.
+ Encoding encoding = 2;
- // Connection string.
- string connection_string = 3;
+ // Connection string.
+ string connection_string = 3;
- // Publish name.
- // This is the name of the topic or queue.
- string publish_name = 4;
+ // Publish name.
+ // This is the name of the topic or queue.
+ string publish_name = 4;
}
message CreateAzureServiceBusIntegrationRequest {
- // Integration object to create.
- AzureServiceBusIntegration integration = 1;
+ // Integration object to create.
+ AzureServiceBusIntegration integration = 1;
}
message GetAzureServiceBusIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetAzureServiceBusIntegrationResponse {
- // Integration object.
- AzureServiceBusIntegration integration = 1;
+ // Integration object.
+ AzureServiceBusIntegration integration = 1;
}
message UpdateAzureServiceBusIntegrationRequest {
- // Integration object to create.
- AzureServiceBusIntegration integration = 1;
+ // Integration object to create.
+ AzureServiceBusIntegration integration = 1;
}
message DeleteAzureServiceBusIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message PilotThingsIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Server URL.
- string server = 2;
+ // Server URL.
+ string server = 2;
- // Authentication token.
- string token = 3;
+ // Authentication token.
+ string token = 3;
}
message CreatePilotThingsIntegrationRequest {
- // Integration object to create.
- PilotThingsIntegration integration = 1;
+ // Integration object to create.
+ PilotThingsIntegration integration = 1;
}
message GetPilotThingsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetPilotThingsIntegrationResponse {
- // Integration object.
- PilotThingsIntegration integration = 1;
+ // Integration object.
+ PilotThingsIntegration integration = 1;
}
message UpdatePilotThingsIntegrationRequest {
- // Integration object to update.
- PilotThingsIntegration integration = 1;
+ // Integration object to update.
+ PilotThingsIntegration integration = 1;
}
message DeletePilotThingsIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message IftttIntegration {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
- // Key.
- // This key can be obtained from the IFTTT Webhooks documentation page.
- string key = 2;
+ // Key.
+ // This key can be obtained from the IFTTT Webhooks documentation page.
+ string key = 2;
- // Values.
- // Up to 2 values can be forwarded to IFTTT. These values must map to the
- // decoded payload keys. For example:
- // {
- // "batteryLevel": 75.3,
- // "buttons": [{"pressed": false}, {"pressed": true}]
- // }
- // You would specify the following fields:
- // uplink_values = ["batteryLevel", "buttons_0_pressed"]
- //
- // Note: The first value is always used for the DevEUI.
- repeated string uplink_values = 3;
+ // Values.
+ // Up to 2 values can be forwarded to IFTTT. These values must map to the
+ // decoded payload keys. For example:
+ // {
+ // "batteryLevel": 75.3,
+ // "buttons": [{"pressed": false}, {"pressed": true}]
+ // }
+ // You would specify the following fields:
+ // uplink_values = ["batteryLevel", "buttons_0_pressed"]
+ //
+ // Notes: The first value is always used for the DevEUI.
+ // Ignored if arbitrary_json is set to true.
+ repeated string uplink_values = 3;
+
+ // Arbitrary JSON.
+ // If set to true, ChirpStack events will be sent as-is as arbitrary JSON
+ // payload. If set to false (default), the 3 JSON values format will be used.
+ bool arbitrary_json = 4;
+
+ // Event prefix.
+ // If set, the event name will be PREFIX_EVENT. For example if event_prefix
+ // is set to weatherstation, and uplink event will be sent as
+ // weatherstation_up to the IFTTT webhook.
+ // Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
+ string event_prefix = 5;
}
message CreateIftttIntegrationRequest {
- // Integration object.
- IftttIntegration integration = 1;
+ // Integration object.
+ IftttIntegration integration = 1;
}
message GetIftttIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GetIftttIntegrationResponse {
- // Integration object.
- IftttIntegration integration = 1;
+ // Integration object.
+ IftttIntegration integration = 1;
}
message UpdateIftttIntegrationRequest {
- // Integration object to update.
- IftttIntegration integration = 1;
+ // Integration object to update.
+ IftttIntegration integration = 1;
}
message DeleteIftttIntegrationRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GenerateMqttIntegrationClientCertificateRequest {
- // Application ID (UUID).
- string application_id = 1;
+ // Application ID (UUID).
+ string application_id = 1;
}
message GenerateMqttIntegrationClientCertificateResponse {
- // TLS certificate.
- string tls_cert = 1;
+ // TLS certificate.
+ string tls_cert = 1;
- // TLS key.
- string tls_key = 2;
+ // TLS key.
+ string tls_key = 2;
- // CA certificate.
- string ca_cert = 3;
+ // CA certificate.
+ string ca_cert = 3;
- // Expires at defines the expiration date of the certificate.
- google.protobuf.Timestamp expires_at = 4;
+ // Expires at defines the expiration date of the certificate.
+ google.protobuf.Timestamp expires_at = 4;
}
diff --git a/chirpstack/src/api/application.rs b/chirpstack/src/api/application.rs
index f792f0df..bbd3aabb 100644
--- a/chirpstack/src/api/application.rs
+++ b/chirpstack/src/api/application.rs
@@ -1716,6 +1716,16 @@ impl ApplicationService for Application {
)
.await?;
+ if !req_int.event_prefix.is_empty()
+ && !regex::Regex::new(r"^[a-zA-Z0-9]+$")
+ .unwrap()
+ .is_match(&req_int.event_prefix)
+ {
+ return Err(Status::invalid_argument(
+ "event_prefix may only contain A-Z, a-z and 0-9 characters",
+ ));
+ }
+
let _ = application::create_integration(application::Integration {
application_id: app_id,
kind: application::IntegrationKind::Ifttt,
@@ -1726,6 +1736,8 @@ impl ApplicationService for Application {
req_int.uplink_values.get(0).cloned().unwrap_or_default(),
req_int.uplink_values.get(1).cloned().unwrap_or_default(),
],
+ arbitrary_json: req_int.arbitrary_json,
+ event_prefix: req_int.event_prefix.clone(),
},
),
..Default::default()
@@ -1766,6 +1778,8 @@ impl ApplicationService for Application {
application_id: app_id.to_string(),
key: conf.key.clone(),
uplink_values: conf.uplink_values.to_vec(),
+ arbitrary_json: conf.arbitrary_json,
+ event_prefix: conf.event_prefix.clone(),
}),
});
resp.metadata_mut()
@@ -1806,6 +1820,8 @@ impl ApplicationService for Application {
req_int.uplink_values.get(0).cloned().unwrap_or_default(),
req_int.uplink_values.get(1).cloned().unwrap_or_default(),
],
+ arbitrary_json: req_int.arbitrary_json,
+ event_prefix: req_int.event_prefix.clone(),
},
),
..Default::default()
@@ -3353,6 +3369,8 @@ pub mod test {
application_id: app.id.to_string(),
key: "verysecret".into(),
uplink_values: vec!["value_1".into(), "value_2".into()],
+ arbitrary_json: false,
+ event_prefix: "foo".to_string(),
}),
},
);
@@ -3372,6 +3390,8 @@ pub mod test {
application_id: app.id.to_string(),
key: "verysecret".into(),
uplink_values: vec!["value_1".into(), "value_2".into()],
+ arbitrary_json: false,
+ event_prefix: "foo".to_string(),
}),
get_resp.integration
);
@@ -3384,6 +3404,8 @@ pub mod test {
application_id: app.id.to_string(),
key: "verysecrettoo".into(),
uplink_values: vec!["value_4".into(), "value_5".into()],
+ arbitrary_json: true,
+ event_prefix: "bar".to_string(),
}),
},
);
@@ -3403,6 +3425,8 @@ pub mod test {
application_id: app.id.to_string(),
key: "verysecrettoo".into(),
uplink_values: vec!["value_4".into(), "value_5".into()],
+ arbitrary_json: true,
+ event_prefix: "bar".to_string(),
}),
get_resp.integration
);
diff --git a/chirpstack/src/integration/ifttt.rs b/chirpstack/src/integration/ifttt.rs
index f184e04a..fb8279ff 100644
--- a/chirpstack/src/integration/ifttt.rs
+++ b/chirpstack/src/integration/ifttt.rs
@@ -27,6 +27,8 @@ pub struct Integration {
key: String,
uplink_values: [String; 2],
server: String,
+ arbitrary_json: bool,
+ event_prefix: String,
}
impl Integration {
@@ -37,11 +39,30 @@ impl Integration {
key: conf.key.clone(),
uplink_values: conf.uplink_values.clone(),
server: "https://maker.ifttt.com".to_string(),
+ arbitrary_json: conf.arbitrary_json,
+ event_prefix: conf.event_prefix.clone(),
}
}
- async fn post(&self, event: &str, v: Values) -> Result<()> {
- let url = format!("{}/trigger/{}/with/key/{}", self.server, event, self.key);
+ async fn post(&self, event: &str, v: &T) -> Result<()>
+ where
+ T: Serialize,
+ {
+ let event = if self.event_prefix.is_empty() {
+ event.to_string()
+ } else {
+ format!("{}_{}", self.event_prefix, event)
+ };
+
+ let url = if self.arbitrary_json {
+ format!(
+ "{}/trigger/{}/json/with/key/{}",
+ self.server, event, self.key
+ )
+ } else {
+ format!("{}/trigger/{}/with/key/{}", self.server, event, self.key)
+ };
+
let client = Client::builder().timeout(Duration::from_secs(5)).build()?;
let mut headers = HeaderMap::new();
headers.insert(CONTENT_TYPE, "application/json".parse().unwrap());
@@ -65,6 +86,10 @@ impl IntegrationTrait for Integration {
_vars: &HashMap,
pl: &integration::UplinkEvent,
) -> Result<()> {
+ if self.arbitrary_json {
+ return self.post("up", pl).await;
+ }
+
let data_measurements: HashMap = match &pl.object {
None => {
trace!("object is None, nothing to send");
@@ -91,7 +116,7 @@ impl IntegrationTrait for Integration {
return Ok(());
}
- self.post("up", v).await
+ self.post("up", &v).await
}
async fn join_event(
@@ -170,13 +195,15 @@ pub mod test {
use httpmock::prelude::*;
#[tokio::test]
- async fn test_ifttt() {
+ async fn test_ifttt_no_prefix() {
let server = MockServer::start();
let i = Integration {
key: "verysecret".into(),
uplink_values: ["temp".to_string(), "door_open".to_string()],
server: server.url(""),
+ arbitrary_json: false,
+ event_prefix: "".into(),
};
// uplink event
@@ -228,4 +255,121 @@ pub mod test {
mock.assert();
mock.delete();
}
+
+ #[tokio::test]
+ async fn test_ifttt_prefix() {
+ let server = MockServer::start();
+
+ let i = Integration {
+ key: "verysecret".into(),
+ uplink_values: ["temp".to_string(), "door_open".to_string()],
+ server: server.url(""),
+ arbitrary_json: false,
+ event_prefix: "weatherstation".into(),
+ };
+
+ // uplink event
+ let pl = integration::UplinkEvent {
+ device_info: Some(integration::DeviceInfo {
+ dev_eui: "0102030405060708".to_string(),
+ ..Default::default()
+ }),
+ object: Some(pbjson_types::Struct {
+ fields: [
+ (
+ "temp".to_string(),
+ pbjson_types::Value {
+ kind: Some(pbjson_types::value::Kind::NumberValue(23.5)),
+ },
+ ),
+ (
+ "door_open".to_string(),
+ pbjson_types::Value {
+ kind: Some(pbjson_types::value::Kind::StringValue(
+ "closed".to_string(),
+ )),
+ },
+ ),
+ ]
+ .iter()
+ .cloned()
+ .collect(),
+ }),
+ ..Default::default()
+ };
+ let mut mock = server.mock(|when, then| {
+ when.method(POST)
+ .path("/trigger/weatherstation_up/with/key/verysecret")
+ .header("Content-Type", "application/json")
+ .body(
+ serde_json::to_string(&Values {
+ value1: "0102030405060708".to_string(),
+ value2: "23.5".to_string(),
+ value3: "closed".to_string(),
+ })
+ .unwrap(),
+ );
+
+ then.status(200);
+ });
+
+ i.uplink_event(&HashMap::new(), &pl).await.unwrap();
+ mock.assert();
+ mock.delete();
+ }
+
+ #[tokio::test]
+ async fn test_ifttt_arbitrary_json() {
+ let server = MockServer::start();
+
+ let i = Integration {
+ key: "verysecret".into(),
+ uplink_values: ["temp".to_string(), "door_open".to_string()],
+ server: server.url(""),
+ arbitrary_json: true,
+ event_prefix: "".into(),
+ };
+
+ // uplink event
+ let pl = integration::UplinkEvent {
+ device_info: Some(integration::DeviceInfo {
+ dev_eui: "0102030405060708".to_string(),
+ ..Default::default()
+ }),
+ object: Some(pbjson_types::Struct {
+ fields: [
+ (
+ "temp".to_string(),
+ pbjson_types::Value {
+ kind: Some(pbjson_types::value::Kind::NumberValue(23.5)),
+ },
+ ),
+ (
+ "door_open".to_string(),
+ pbjson_types::Value {
+ kind: Some(pbjson_types::value::Kind::StringValue(
+ "closed".to_string(),
+ )),
+ },
+ ),
+ ]
+ .iter()
+ .cloned()
+ .collect(),
+ }),
+ ..Default::default()
+ };
+ let mut mock = server.mock(|when, then| {
+ when.method(POST)
+ .path("/trigger/up/json/with/key/verysecret")
+ .header("Content-Type", "application/json")
+ .body(serde_json::to_string(&pl).unwrap());
+
+ then.status(200);
+ });
+
+ i.uplink_event(&HashMap::new(), &pl).await.unwrap();
+ mock.assert();
+ mock.delete();
+ }
}
diff --git a/chirpstack/src/storage/application.rs b/chirpstack/src/storage/application.rs
index ee2a2ec6..4e68fc7d 100644
--- a/chirpstack/src/storage/application.rs
+++ b/chirpstack/src/storage/application.rs
@@ -252,10 +252,13 @@ pub struct PilotThingsConfiguration {
pub token: String,
}
-#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
+#[serde(default)]
pub struct IftttConfiguration {
pub key: String,
pub uplink_values: [String; 2], // The first value is reserved for the DevEUI
+ pub arbitrary_json: bool,
+ pub event_prefix: String,
}
#[derive(Clone, Queryable, Insertable, PartialEq, Eq, Debug)]
diff --git a/ui/src/views/applications/integrations/IftttIntegrationForm.tsx b/ui/src/views/applications/integrations/IftttIntegrationForm.tsx
index da4b7076..a238ceff 100644
--- a/ui/src/views/applications/integrations/IftttIntegrationForm.tsx
+++ b/ui/src/views/applications/integrations/IftttIntegrationForm.tsx
@@ -1,6 +1,6 @@
import React, { Component } from "react";
-import { Form, Input, AutoComplete, Button } from "antd";
+import { Form, Input, AutoComplete, Button, Row, Col, Switch } from "antd";
import { IftttIntegration } from "@chirpstack/chirpstack-api-grpc-web/api/application_pb";
@@ -10,18 +10,46 @@ interface IProps {
onFinish: (obj: IftttIntegration) => void;
}
-class IftttIntegrationForm extends Component {
+interface IState {
+ arbitraryJson: boolean;
+}
+
+class IftttIntegrationForm extends Component {
+ constructor(props: IProps) {
+ super(props);
+
+ this.state = {
+ arbitraryJson: false,
+ };
+ }
+
+ componentDidMount() {
+ const v = this.props.initialValues;
+
+ this.setState({
+ arbitraryJson: v.getArbitraryJson(),
+ });
+ }
+
onFinish = (values: IftttIntegration.AsObject) => {
const v = Object.assign(this.props.initialValues.toObject(), values);
let i = new IftttIntegration();
i.setApplicationId(v.applicationId);
i.setKey(v.key);
+ i.setEventPrefix(v.eventPrefix);
+ i.setArbitraryJson(v.arbitraryJson);
i.setUplinkValuesList(v.uplinkValuesList);
this.props.onFinish(i);
};
+ onArbitraryJsonChange = (checked: boolean) => {
+ this.setState({
+ arbitraryJson: checked,
+ });
+ }
+
render() {
const options: {
value: string;
@@ -39,21 +67,45 @@ class IftttIntegrationForm extends Component {
>
-
+
+
+
+
+
+
+
+
+
+
+
+
+ {!this.state.arbitraryJson &&
{fields => (
-
+
{fields.map((field, i) => (
-
-
-
+
+
+
+
+
))}
-
+
)}
-
+ }