templates.swift 35 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. *
  3. * Copyright 2017, Google Inc.
  4. * All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions are
  8. * met:
  9. *
  10. * * Redistributions of source code must retain the above copyright
  11. * notice, this list of conditions and the following disclaimer.
  12. * * Redistributions in binary form must reproduce the above
  13. * copyright notice, this list of conditions and the following disclaimer
  14. * in the documentation and/or other materials provided with the
  15. * distribution.
  16. * * Neither the name of Google Inc. nor the names of its
  17. * contributors may be used to endorse or promote products derived from
  18. * this software without specific prior written permission.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  23. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  24. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  25. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  26. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  30. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. *
  32. */
  33. // GENERATED: DO NOT EDIT
  34. //
  35. // This file contains base64 encodings of templates used for Swift GRPC code generation.
  36. //
  37. func loadTemplates() -> [String:String] {
  38. var templates : [String:String] = [:]
  39. templates["client-call-bidistreaming.swift"] = "Ly8vIHt7IG1ldGhvZC5uYW1lIH19IChCaWRpcmVjdGlvbmFsIFN0cmVhbWluZykKe3sgYWNjZXNzIH19IGNsYXNzIHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICBwcml2YXRlIHZhciBjYWxsIDogQ2FsbAoKICAvLy8gQ3JlYXRlIGEgY2FsbC4KICBmaWxlcHJpdmF0ZSBpbml0KF8gY2hhbm5lbDogQ2hhbm5lbCkgewogICAgc2VsZi5jYWxsID0gY2hhbm5lbC5tYWtlQ2FsbCgie3sgLnxwYXRoOmZpbGUsc2VydmljZSxtZXRob2QgfX0iKQogIH0KCiAgLy8vIENhbGwgdGhpcyB0byBzdGFydCBhIGNhbGwuIE5vbmJsb2NraW5nLgogIGZpbGVwcml2YXRlIGZ1bmMgc3RhcnQobWV0YWRhdGE6TWV0YWRhdGEsIGNvbXBsZXRpb246QGVzY2FwaW5nIChDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogICAgICB0cnkgc2VsZi5jYWxsLnN0YXJ0KC5iaWRpU3RyZWFtaW5nLCBtZXRhZGF0YTptZXRhZGF0YSwgY29tcGxldGlvbjpjb21wbGV0aW9uKQogICAgICByZXR1cm4gc2VsZgogIH0KCiAgLy8vIENhbGwgdGhpcyB0byB3YWl0IGZvciBhIHJlc3VsdC4gQmxvY2tpbmcuCiAge3sgYWNjZXNzIH19IGZ1bmMgcmVjZWl2ZSgpIHRocm93cyAtPiB7eyBtZXRob2R8b3V0cHV0IH19IHsKICAgIHZhciByZXR1cm5FcnJvciA6IHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PwogICAgdmFyIHJldHVybk1lc3NhZ2UgOiB7eyBtZXRob2R8b3V0cHV0IH19IQogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgZG8gewogICAgICB0cnkgcmVjZWl2ZSgpIHtyZXNwb25zZSwgZXJyb3IgaW4KICAgICAgICByZXR1cm5NZXNzYWdlID0gcmVzcG9uc2UKICAgICAgICByZXR1cm5FcnJvciA9IGVycm9yCiAgICAgICAgc2VtLnNpZ25hbCgpCiAgICAgIH0KICAgICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogICAgfQogICAgaWYgbGV0IHJldHVybkVycm9yID0gcmV0dXJuRXJyb3IgewogICAgICB0aHJvdyByZXR1cm5FcnJvcgogICAgfQogICAgcmV0dXJuIHJldHVybk1lc3NhZ2UKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gd2FpdCBmb3IgYSByZXN1bHQuIE5vbmJsb2NraW5nLgogIHt7IGFjY2VzcyB9fSBmdW5jIHJlY2VpdmUoY29tcGxldGlvbjpAZXNjYXBpbmcgKHt7IG1ldGhvZHxvdXRwdXQgfX0/LCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fT8pLT4oKSkgdGhyb3dzIHsKICAgIGRvIHsKICAgICAgdHJ5IGNhbGwucmVjZWl2ZU1lc3NhZ2UoKSB7KGRhdGEpIGluCiAgICAgICAgaWYgbGV0IGRhdGEgPSBkYXRhIHsKICAgICAgICAgIGlmIGxldCByZXR1cm5NZXNzYWdlID0gdHJ5PyB7eyBtZXRob2R8b3V0cHV0IH19KHNlcmlhbGl6ZWREYXRhOmRhdGEpIHsKICAgICAgICAgICAgY29tcGxldGlvbihyZXR1cm5NZXNzYWdlLCBuaWwpCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb21wbGV0aW9uKG5pbCwge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uaW52YWxpZE1lc3NhZ2VSZWNlaXZlZCkKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29tcGxldGlvbihuaWwsIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19LmVuZE9mU3RyZWFtKQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIENhbGwgdGhpcyB0byBzZW5kIGVhY2ggbWVzc2FnZSBpbiB0aGUgcmVxdWVzdCBzdHJlYW0uCiAge3sgYWNjZXNzIH19IGZ1bmMgc2VuZChfIG1lc3NhZ2U6e3sgbWV0aG9kfGlucHV0IH19LCBlcnJvckhhbmRsZXI6QGVzY2FwaW5nIChFcnJvciktPigpKSB0aHJvd3MgewogICAgbGV0IG1lc3NhZ2VEYXRhID0gdHJ5IG1lc3NhZ2Uuc2VyaWFsaXplZERhdGEoKQogICAgdHJ5IGNhbGwuc2VuZE1lc3NhZ2UoZGF0YTptZXNzYWdlRGF0YSwgZXJyb3JIYW5kbGVyOmVycm9ySGFuZGxlcikKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gY2xvc2UgdGhlIHNlbmRpbmcgY29ubmVjdGlvbi4gQmxvY2tpbmcuCiAge3sgYWNjZXNzIH19IGZ1bmMgY2xvc2VTZW5kKCkgdGhyb3dzIHsKICAgIGxldCBzZW0gPSBEaXNwYXRjaFNlbWFwaG9yZSh2YWx1ZTogMCkKICAgIHRyeSBjbG9zZVNlbmQoKSB7CiAgICAgIHNlbS5zaWduYWwoKQogICAgfQogICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogIH0KCiAgLy8vIENhbGwgdGhpcyB0byBjbG9zZSB0aGUgc2VuZGluZyBjb25uZWN0aW9uLiBOb25ibG9ja2luZy4KICB7eyBhY2Nlc3MgfX0gZnVuYyBjbG9zZVNlbmQoY29tcGxldGlvbjpAZXNjYXBpbmcgKCktPigpKSB0aHJvd3MgewogICAgdHJ5IGNhbGwuY2xvc2UoKSB7CiAgICAgIGNvbXBsZXRpb24oKQogICAgfQogIH0KCiAgLy8vIENhbmNlbCB0aGUgY2FsbC4KICB7eyBhY2Nlc3MgfX0gZnVuYyBjYW5jZWwoKSB7CiAgICBjYWxsLmNhbmNlbCgpCiAgfQp9Cg=="
  40. templates["client-call-clientstreaming.swift"] = "Ly8vIHt7IG1ldGhvZC5uYW1lIH19IChDbGllbnQgU3RyZWFtaW5nKQp7eyBhY2Nlc3MgfX0gY2xhc3Mge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogIHByaXZhdGUgdmFyIGNhbGwgOiBDYWxsCgogIC8vLyBDcmVhdGUgYSBjYWxsLgogIGZpbGVwcml2YXRlIGluaXQoXyBjaGFubmVsOiBDaGFubmVsKSB7CiAgICBzZWxmLmNhbGwgPSBjaGFubmVsLm1ha2VDYWxsKCJ7eyAufHBhdGg6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSIpCiAgfQoKICAvLy8gQ2FsbCB0aGlzIHRvIHN0YXJ0IGEgY2FsbC4gTm9uYmxvY2tpbmcuCiAgZmlsZXByaXZhdGUgZnVuYyBzdGFydChtZXRhZGF0YTpNZXRhZGF0YSwgY29tcGxldGlvbjpAZXNjYXBpbmcgKENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cyAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgICAgIHRyeSBzZWxmLmNhbGwuc3RhcnQoLmNsaWVudFN0cmVhbWluZywgbWV0YWRhdGE6bWV0YWRhdGEsIGNvbXBsZXRpb246Y29tcGxldGlvbikKICAgICAgcmV0dXJuIHNlbGYKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gc2VuZCBlYWNoIG1lc3NhZ2UgaW4gdGhlIHJlcXVlc3Qgc3RyZWFtLiBOb25ibG9ja2luZy4KICB7eyBhY2Nlc3MgfX0gZnVuYyBzZW5kKF8gbWVzc2FnZTp7eyBtZXRob2R8aW5wdXQgfX0sIGVycm9ySGFuZGxlcjpAZXNjYXBpbmcgKEVycm9yKS0+KCkpIHRocm93cyB7CiAgICBsZXQgbWVzc2FnZURhdGEgPSB0cnkgbWVzc2FnZS5zZXJpYWxpemVkRGF0YSgpCiAgICB0cnkgY2FsbC5zZW5kTWVzc2FnZShkYXRhOm1lc3NhZ2VEYXRhLCBlcnJvckhhbmRsZXI6ZXJyb3JIYW5kbGVyKQogIH0KCiAgLy8vIENhbGwgdGhpcyB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgd2FpdCBmb3IgYSByZXNwb25zZS4gQmxvY2tpbmcuCiAge3sgYWNjZXNzIH19IGZ1bmMgY2xvc2VBbmRSZWNlaXZlKCkgdGhyb3dzIC0+IHt7IG1ldGhvZHxvdXRwdXQgfX0gewogICAgdmFyIHJldHVybkVycm9yIDoge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0/CiAgICB2YXIgcmV0dXJuUmVzcG9uc2UgOiB7eyBtZXRob2R8b3V0cHV0IH19IQogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgZG8gewogICAgICB0cnkgY2xvc2VBbmRSZWNlaXZlKCkge3Jlc3BvbnNlLCBlcnJvciBpbgogICAgICAgIHJldHVyblJlc3BvbnNlID0gcmVzcG9uc2UKICAgICAgICByZXR1cm5FcnJvciA9IGVycm9yCiAgICAgICAgc2VtLnNpZ25hbCgpCiAgICAgIH0KICAgICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogICAgfSBjYXRjaCAobGV0IGVycm9yKSB7CiAgICAgIHRocm93IGVycm9yCiAgICB9CiAgICBpZiBsZXQgcmV0dXJuRXJyb3IgPSByZXR1cm5FcnJvciB7CiAgICAgIHRocm93IHJldHVybkVycm9yCiAgICB9CiAgICByZXR1cm4gcmV0dXJuUmVzcG9uc2UKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UuIE5vbmJsb2NraW5nLgogIHt7IGFjY2VzcyB9fSBmdW5jIGNsb3NlQW5kUmVjZWl2ZShjb21wbGV0aW9uOkBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PyktPigpKQogICAgdGhyb3dzIHsKICAgICAgZG8gewogICAgICAgIHRyeSBjYWxsLnJlY2VpdmVNZXNzYWdlKCkgeyhyZXNwb25zZURhdGEpIGluCiAgICAgICAgICBpZiBsZXQgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VEYXRhLAogICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSB0cnk/IHt7IG1ldGhvZHxvdXRwdXQgfX0oc2VyaWFsaXplZERhdGE6cmVzcG9uc2VEYXRhKSB7CiAgICAgICAgICAgIGNvbXBsZXRpb24ocmVzcG9uc2UsIG5pbCkKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbXBsZXRpb24obmlsLCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fS5pbnZhbGlkTWVzc2FnZVJlY2VpdmVkKQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0cnkgY2FsbC5jbG9zZShjb21wbGV0aW9uOnt9KQogICAgICB9IGNhdGNoIChsZXQgZXJyb3IpIHsKICAgICAgICB0aHJvdyBlcnJvcgogICAgICB9CiAgfQoKICAvLy8gQ2FuY2VsIHRoZSBjYWxsLgogIHt7IGFjY2VzcyB9fSBmdW5jIGNhbmNlbCgpIHsKICAgIGNhbGwuY2FuY2VsKCkKICB9Cn0K"
  41. templates["client-call-serverstreaming.swift"] = "Ly8vIHt7IG1ldGhvZC5uYW1lIH19IChTZXJ2ZXIgU3RyZWFtaW5nKQp7eyBhY2Nlc3MgfX0gY2xhc3Mge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogIHByaXZhdGUgdmFyIGNhbGwgOiBDYWxsCgogIC8vLyBDcmVhdGUgYSBjYWxsLgogIGZpbGVwcml2YXRlIGluaXQoXyBjaGFubmVsOiBDaGFubmVsKSB7CiAgICBzZWxmLmNhbGwgPSBjaGFubmVsLm1ha2VDYWxsKCJ7eyAufHBhdGg6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSIpCiAgfQoKICAvLy8gQ2FsbCB0aGlzIG9uY2Ugd2l0aCB0aGUgbWVzc2FnZSB0byBzZW5kLiBOb25ibG9ja2luZy4KICBmaWxlcHJpdmF0ZSBmdW5jIHN0YXJ0KHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBNZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb246IEBlc2NhcGluZyAoQ2FsbFJlc3VsdCkgLT4gKCkpCiAgICB0aHJvd3MgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogICAgICBsZXQgcmVxdWVzdERhdGEgPSB0cnkgcmVxdWVzdC5zZXJpYWxpemVkRGF0YSgpCiAgICAgIHRyeSBjYWxsLnN0YXJ0KC5zZXJ2ZXJTdHJlYW1pbmcsCiAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOm1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOnJlcXVlc3REYXRhLAogICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOmNvbXBsZXRpb24pCiAgICAgIHJldHVybiBzZWxmCiAgfQoKICAvLy8gQ2FsbCB0aGlzIHRvIHdhaXQgZm9yIGEgcmVzdWx0LiBCbG9ja2luZy4KICB7eyBhY2Nlc3MgfX0gZnVuYyByZWNlaXZlKCkgdGhyb3dzIC0+IHt7IG1ldGhvZHxvdXRwdXQgfX0gewogICAgdmFyIHJldHVybkVycm9yIDoge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0/CiAgICB2YXIgcmV0dXJuUmVzcG9uc2UgOiB7eyBtZXRob2R8b3V0cHV0IH19IQogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgZG8gewogICAgICB0cnkgcmVjZWl2ZSgpIHtyZXNwb25zZSwgZXJyb3IgaW4KICAgICAgICByZXR1cm5SZXNwb25zZSA9IHJlc3BvbnNlCiAgICAgICAgcmV0dXJuRXJyb3IgPSBlcnJvcgogICAgICAgIHNlbS5zaWduYWwoKQogICAgICB9CiAgICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICAgIH0KICAgIGlmIGxldCByZXR1cm5FcnJvciA9IHJldHVybkVycm9yIHsKICAgICAgdGhyb3cgcmV0dXJuRXJyb3IKICAgIH0KICAgIHJldHVybiByZXR1cm5SZXNwb25zZQogIH0KCiAgLy8vIENhbGwgdGhpcyB0byB3YWl0IGZvciBhIHJlc3VsdC4gTm9uYmxvY2tpbmcuCiAge3sgYWNjZXNzIH19IGZ1bmMgcmVjZWl2ZShjb21wbGV0aW9uOkBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PyktPigpKSB0aHJvd3MgewogICAgZG8gewogICAgICB0cnkgY2FsbC5yZWNlaXZlTWVzc2FnZSgpIHsocmVzcG9uc2VEYXRhKSBpbgogICAgICAgIGlmIGxldCByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEgewogICAgICAgICAgaWYgbGV0IHJlc3BvbnNlID0gdHJ5PyB7eyBtZXRob2R8b3V0cHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlc3BvbnNlRGF0YSkgewogICAgICAgICAgICBjb21wbGV0aW9uKHJlc3BvbnNlLCBuaWwpCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb21wbGV0aW9uKG5pbCwge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uaW52YWxpZE1lc3NhZ2VSZWNlaXZlZCkKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29tcGxldGlvbihuaWwsIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19LmVuZE9mU3RyZWFtKQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIENhbmNlbCB0aGUgY2FsbC4KICB7eyBhY2Nlc3MgfX0gZnVuYyBjYW5jZWwoKSB7CiAgICBjYWxsLmNhbmNlbCgpCiAgfQp9Cg=="
  42. templates["client-call-unary.swift"] = "Ly8vIHt7IG1ldGhvZC5uYW1lIH19IChVbmFyeSkKe3sgYWNjZXNzIH19IGNsYXNzIHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICBwcml2YXRlIHZhciBjYWxsIDogQ2FsbAoKICAvLy8gQ3JlYXRlIGEgY2FsbC4KICBmaWxlcHJpdmF0ZSBpbml0KF8gY2hhbm5lbDogQ2hhbm5lbCkgewogICAgc2VsZi5jYWxsID0gY2hhbm5lbC5tYWtlQ2FsbCgie3sgLnxwYXRoOmZpbGUsc2VydmljZSxtZXRob2QgfX0iKQogIH0KCiAgLy8vIFJ1biB0aGUgY2FsbC4gQmxvY2tzIHVudGlsIHRoZSByZXBseSBpcyByZWNlaXZlZC4KICBmaWxlcHJpdmF0ZSBmdW5jIHJ1bihyZXF1ZXN0OiB7eyBtZXRob2R8aW5wdXQgfX0sCiAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IE1ldGFkYXRhKSB0aHJvd3MgLT4ge3sgbWV0aG9kfG91dHB1dCB9fSB7CiAgICBsZXQgc2VtID0gRGlzcGF0Y2hTZW1hcGhvcmUodmFsdWU6IDApCiAgICB2YXIgcmV0dXJuQ2FsbFJlc3VsdCA6IENhbGxSZXN1bHQhCiAgICB2YXIgcmV0dXJuUmVzcG9uc2UgOiB7eyBtZXRob2R8b3V0cHV0IH19PwogICAgXyA9IHRyeSBzdGFydChyZXF1ZXN0OnJlcXVlc3QsIG1ldGFkYXRhOm1ldGFkYXRhKSB7cmVzcG9uc2UsIGNhbGxSZXN1bHQgaW4KICAgICAgcmV0dXJuUmVzcG9uc2UgPSByZXNwb25zZQogICAgICByZXR1cm5DYWxsUmVzdWx0ID0gY2FsbFJlc3VsdAogICAgICBzZW0uc2lnbmFsKCkKICAgIH0KICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICAgIGlmIGxldCByZXR1cm5SZXNwb25zZSA9IHJldHVyblJlc3BvbnNlIHsKICAgICAgcmV0dXJuIHJldHVyblJlc3BvbnNlCiAgICB9IGVsc2UgewogICAgICB0aHJvdyB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fS5lcnJvcihjOiByZXR1cm5DYWxsUmVzdWx0KQogICAgfQogIH0KCiAgLy8vIFN0YXJ0IHRoZSBjYWxsLiBOb25ibG9ja2luZy4KICBmaWxlcHJpdmF0ZSBmdW5jIHN0YXJ0KHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBNZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb246IEBlc2NhcGluZyAoe3sgbWV0aG9kfG91dHB1dCB9fT8sIENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cyAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CgogICAgICBsZXQgcmVxdWVzdERhdGEgPSB0cnkgcmVxdWVzdC5zZXJpYWxpemVkRGF0YSgpCiAgICAgIHRyeSBjYWxsLnN0YXJ0KC51bmFyeSwKICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6bWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6cmVxdWVzdERhdGEpCiAgICAgIHsoY2FsbFJlc3VsdCkgaW4KICAgICAgICBpZiBsZXQgcmVzcG9uc2VEYXRhID0gY2FsbFJlc3VsdC5yZXN1bHREYXRhLAogICAgICAgICAgbGV0IHJlc3BvbnNlID0gdHJ5PyB7eyBtZXRob2R8b3V0cHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlc3BvbnNlRGF0YSkgewogICAgICAgICAgY29tcGxldGlvbihyZXNwb25zZSwgY2FsbFJlc3VsdCkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29tcGxldGlvbihuaWwsIGNhbGxSZXN1bHQpCiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzZWxmCiAgfQoKICAvLy8gQ2FuY2VsIHRoZSBjYWxsLgogIHt7IGFjY2VzcyB9fSBmdW5jIGNhbmNlbCgpIHsKICAgIGNhbGwuY2FuY2VsKCkKICB9Cn0K"
  43. templates["client.pb.swift"] = "LyoKICogRE8gTk9UIEVESVQuCiAqCiAqIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLgogKiBTb3VyY2U6IHt7IGZpbGUubmFtZSB9fQogKgogKi8KCi8qCiAqIENvcHlyaWdodCAyMDE3LCBnUlBDIEF1dGhvcnMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCBGb3VuZGF0aW9uCmltcG9ydCBEaXNwYXRjaAppbXBvcnQgZ1JQQwppbXBvcnQgU3dpZnRQcm90b2J1ZgovLy17JSBmb3Igc2VydmljZSBpbiBmaWxlLnNlcnZpY2UgJX0KCi8vLyBUeXBlIGZvciBlcnJvcnMgdGhyb3duIGZyb20gZ2VuZXJhdGVkIGNsaWVudCBjb2RlLgp7eyBhY2Nlc3MgfX0gZW51bSB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fSA6IEVycm9yIHsKICBjYXNlIGVuZE9mU3RyZWFtCiAgY2FzZSBpbnZhbGlkTWVzc2FnZVJlY2VpdmVkCiAgY2FzZSBlcnJvcihjOiBDYWxsUmVzdWx0KQp9CgovLy17JSBmb3IgbWV0aG9kIGluIHNlcnZpY2UubWV0aG9kICV9Ci8vLXslIGlmIG5vdCBtZXRob2QuY2xpZW50U3RyZWFtaW5nIGFuZCBub3QgbWV0aG9kLnNlcnZlclN0cmVhbWluZyAlfQovLy17JSBpbmNsdWRlICJjbGllbnQtY2FsbC11bmFyeS5zd2lmdCIgJX0KLy8teyUgZW5kaWYgJX0KLy8teyUgaWYgbm90IG1ldGhvZC5jbGllbnRTdHJlYW1pbmcgYW5kIG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KLy8teyUgaW5jbHVkZSAiY2xpZW50LWNhbGwtc2VydmVyc3RyZWFtaW5nLnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBpZiBtZXRob2QuY2xpZW50U3RyZWFtaW5nIGFuZCBub3QgbWV0aG9kLnNlcnZlclN0cmVhbWluZyAlfQovLy17JSBpbmNsdWRlICJjbGllbnQtY2FsbC1jbGllbnRzdHJlYW1pbmcuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGlmIG1ldGhvZC5jbGllbnRTdHJlYW1pbmcgYW5kIG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KLy8teyUgaW5jbHVkZSAiY2xpZW50LWNhbGwtYmlkaXN0cmVhbWluZy5zd2lmdCIgJX0KLy8teyUgZW5kaWYgJX0KLy8teyUgZW5kZm9yICV9Ci8vLyBDYWxsIG1ldGhvZHMgb2YgdGhpcyBjbGFzcyB0byBtYWtlIEFQSSBjYWxscy4Ke3sgYWNjZXNzIH19IGNsYXNzIHt7IC58c2VydmljZWNsYXNzOmZpbGUsc2VydmljZSB9fSB7CiAgcHJpdmF0ZSB2YXIgY2hhbm5lbDogQ2hhbm5lbAoKICAvLy8gVGhpcyBtZXRhZGF0YSB3aWxsIGJlIHNlbnQgd2l0aCBhbGwgcmVxdWVzdHMuCiAge3sgYWNjZXNzIH19IHZhciBtZXRhZGF0YSA6IE1ldGFkYXRhCgogIC8vLyBUaGlzIHByb3BlcnR5IGFsbG93cyB0aGUgc2VydmljZSBob3N0IG5hbWUgdG8gYmUgb3ZlcnJpZGRlbi4KICAvLy8gRm9yIGV4YW1wbGUsIGl0IGNhbiBiZSB1c2VkIHRvIG1ha2UgY2FsbHMgdG8gImxvY2FsaG9zdDo4MDgwIgogIC8vLyBhcHBlYXIgdG8gYmUgdG8gImV4YW1wbGUuY29tIi4KICB7eyBhY2Nlc3MgfX0gdmFyIGhvc3QgOiBTdHJpbmcgewogICAgZ2V0IHsKICAgICAgcmV0dXJuIHNlbGYuY2hhbm5lbC5ob3N0CiAgICB9CiAgICBzZXQgewogICAgICBzZWxmLmNoYW5uZWwuaG9zdCA9IG5ld1ZhbHVlCiAgICB9CiAgfQoKICAvLy8gQ3JlYXRlIGEgY2xpZW50IHRoYXQgbWFrZXMgaW5zZWN1cmUgY29ubmVjdGlvbnMuCiAge3sgYWNjZXNzIH19IGluaXQoYWRkcmVzczogU3RyaW5nKSB7CiAgICBnUlBDLmluaXRpYWxpemUoKQogICAgY2hhbm5lbCA9IENoYW5uZWwoYWRkcmVzczphZGRyZXNzKQogICAgbWV0YWRhdGEgPSBNZXRhZGF0YSgpCiAgfQoKICAvLy8gQ3JlYXRlIGEgY2xpZW50IHRoYXQgbWFrZXMgc2VjdXJlIGNvbm5lY3Rpb25zLgogIHt7IGFjY2VzcyB9fSBpbml0KGFkZHJlc3M6IFN0cmluZywgY2VydGlmaWNhdGVzOiBTdHJpbmc/LCBob3N0OiBTdHJpbmc/KSB7CiAgICBnUlBDLmluaXRpYWxpemUoKQogICAgY2hhbm5lbCA9IENoYW5uZWwoYWRkcmVzczphZGRyZXNzLCBjZXJ0aWZpY2F0ZXM6Y2VydGlmaWNhdGVzLCBob3N0Omhvc3QpCiAgICBtZXRhZGF0YSA9IE1ldGFkYXRhKCkKICB9CgogIC8vLXslIGZvciBtZXRob2QgaW4gc2VydmljZS5tZXRob2QgJX0KICAvLy17JSBpZiBub3QgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbm90IG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KICAvLy8gU3luY2hyb25vdXMuIFVuYXJ5LgogIHt7IGFjY2VzcyB9fSBmdW5jIHt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShfIHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSkKICAgIHRocm93cwogICAgLT4ge3sgbWV0aG9kfG91dHB1dCB9fSB7CiAgICAgIHJldHVybiB0cnkge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0oY2hhbm5lbCkucnVuKHJlcXVlc3Q6cmVxdWVzdCwgbWV0YWRhdGE6bWV0YWRhdGEpCiAgfQogIC8vLyBBc3luY2hyb25vdXMuIFVuYXJ5LgogIHt7IGFjY2VzcyB9fSBmdW5jIHt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShfIHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSwKICAgICAgICAgICAgICAgICAgY29tcGxldGlvbjogQGVzY2FwaW5nICh7eyBtZXRob2R8b3V0cHV0IH19PywgQ2FsbFJlc3VsdCktPigpKQogICAgdGhyb3dzCiAgICAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgICAgIHJldHVybiB0cnkge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0oY2hhbm5lbCkuc3RhcnQocmVxdWVzdDpyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6bWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOmNvbXBsZXRpb24pCiAgfQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbm90IG1ldGhvZC5jbGllbnRTdHJlYW1pbmcgYW5kIG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KICAvLy8gQXN5bmNocm9ub3VzLiBTZXJ2ZXItc3RyZWFtaW5nLgogIC8vLyBTZW5kIHRoZSBpbml0aWFsIG1lc3NhZ2UuCiAgLy8vIFVzZSBtZXRob2RzIG9uIHRoZSByZXR1cm5lZCBvYmplY3QgdG8gZ2V0IHN0cmVhbWVkIHJlc3BvbnNlcy4KICB7eyBhY2Nlc3MgfX0gZnVuYyB7eyBtZXRob2QubmFtZXxsb3dlcmNhc2UgfX0oXyByZXF1ZXN0OiB7eyBtZXRob2R8aW5wdXQgfX0sIGNvbXBsZXRpb246IEBlc2NhcGluZyAoQ2FsbFJlc3VsdCktPigpKQogICAgdGhyb3dzCiAgICAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgICAgIHJldHVybiB0cnkge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0oY2hhbm5lbCkuc3RhcnQocmVxdWVzdDpyZXF1ZXN0LCBtZXRhZGF0YTptZXRhZGF0YSwgY29tcGxldGlvbjpjb21wbGV0aW9uKQogIH0KICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGlmIG1ldGhvZC5jbGllbnRTdHJlYW1pbmcgYW5kIG5vdCBtZXRob2Quc2VydmVyU3RyZWFtaW5nICV9CiAgLy8vIEFzeW5jaHJvbm91cy4gQ2xpZW50LXN0cmVhbWluZy4KICAvLy8gVXNlIG1ldGhvZHMgb24gdGhlIHJldHVybmVkIG9iamVjdCB0byBzdHJlYW0gbWVzc2FnZXMgYW5kCiAgLy8vIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIGFuZCB3YWl0IGZvciBhIGZpbmFsIHJlc3BvbnNlLgogIHt7IGFjY2VzcyB9fSBmdW5jIHt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShjb21wbGV0aW9uOiBAZXNjYXBpbmcgKENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cwogICAgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogICAgICByZXR1cm4gdHJ5IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KGNoYW5uZWwpLnN0YXJ0KG1ldGFkYXRhOm1ldGFkYXRhLCBjb21wbGV0aW9uOmNvbXBsZXRpb24pCiAgfQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbWV0aG9kLnNlcnZlclN0cmVhbWluZyAlfQogIC8vLyBBc3luY2hyb25vdXMuIEJpZGlyZWN0aW9uYWwtc3RyZWFtaW5nLgogIC8vLyBVc2UgbWV0aG9kcyBvbiB0aGUgcmV0dXJuZWQgb2JqZWN0IHRvIHN0cmVhbSBtZXNzYWdlcywKICAvLy8gdG8gd2FpdCBmb3IgcmVwbGllcywgYW5kIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogIHt7IGFjY2VzcyB9fSBmdW5jIHt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShjb21wbGV0aW9uOiBAZXNjYXBpbmcgKENhbGxSZXN1bHQpLT4oKSkKICAgIHRocm93cwogICAgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogICAgICByZXR1cm4gdHJ5IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KGNoYW5uZWwpLnN0YXJ0KG1ldGFkYXRhOm1ldGFkYXRhLCBjb21wbGV0aW9uOmNvbXBsZXRpb24pCiAgfQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgZW5kZm9yICV9Cn0KLy8teyUgZW5kZm9yICV9Cg=="
  44. templates["server-session-bidistreaming.swift"] = "Ly8ge3sgbWV0aG9kLm5hbWUgfX0gKEJpZGlyZWN0aW9uYWwgU3RyZWFtaW5nKQp7eyBhY2Nlc3MgfX0gY2xhc3Mge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gOiB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvbiB7CiAgcHJpdmF0ZSB2YXIgcHJvdmlkZXIgOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fQoKICAvLy8gQ3JlYXRlIGEgc2Vzc2lvbi4KICBmaWxlcHJpdmF0ZSBpbml0KGhhbmRsZXI6Z1JQQy5IYW5kbGVyLCBwcm92aWRlcjoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0pIHsKICAgIHNlbGYucHJvdmlkZXIgPSBwcm92aWRlcgogICAgc3VwZXIuaW5pdChoYW5kbGVyOmhhbmRsZXIpCiAgfQoKICAvLy8gUmVjZWl2ZSBhIG1lc3NhZ2UuIEJsb2NrcyB1bnRpbCBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgb3IgdGhlIGNsaWVudCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uCiAge3sgYWNjZXNzIH19IGZ1bmMgcmVjZWl2ZSgpIHRocm93cyAtPiB7eyBtZXRob2R8aW5wdXQgfX0gewogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgdmFyIHJlcXVlc3RNZXNzYWdlIDoge3sgbWV0aG9kfGlucHV0IH19PwogICAgdHJ5IHNlbGYuaGFuZGxlci5yZWNlaXZlTWVzc2FnZSgpIHsocmVxdWVzdERhdGEpIGluCiAgICAgIGlmIGxldCByZXF1ZXN0RGF0YSA9IHJlcXVlc3REYXRhIHsKICAgICAgICBkbyB7CiAgICAgICAgICByZXF1ZXN0TWVzc2FnZSA9IHRyeSB7eyBtZXRob2R8aW5wdXQgfX0oc2VyaWFsaXplZERhdGE6cmVxdWVzdERhdGEpCiAgICAgICAgfSBjYXRjaCAobGV0IGVycm9yKSB7CiAgICAgICAgICBwcmludCgiZXJyb3IgXChlcnJvcikiKQogICAgICAgIH0KICAgICAgfQogICAgICBzZW0uc2lnbmFsKCkKICAgIH0KICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICAgIGlmIGxldCByZXF1ZXN0TWVzc2FnZSA9IHJlcXVlc3RNZXNzYWdlIHsKICAgICAgcmV0dXJuIHJlcXVlc3RNZXNzYWdlCiAgICB9IGVsc2UgewogICAgICB0aHJvdyB7eyAufHNlcnZlcmVycm9yOmZpbGUsc2VydmljZSB9fS5lbmRPZlN0cmVhbQogICAgfQogIH0KCiAgLy8vIFNlbmQgYSBtZXNzYWdlLiBOb25ibG9ja2luZy4KICB7eyBhY2Nlc3MgfX0gZnVuYyBzZW5kKF8gcmVzcG9uc2U6IHt7IG1ldGhvZHxvdXRwdXQgfX0sIGNvbXBsZXRpb246IEBlc2NhcGluZyAoKS0+KCkpIHRocm93cyB7CiAgICB0cnkgaGFuZGxlci5zZW5kUmVzcG9uc2UobWVzc2FnZTpyZXNwb25zZS5zZXJpYWxpemVkRGF0YSgpKSB7Y29tcGxldGlvbigpfQogIH0KCiAgLy8vIENsb3NlIGEgY29ubmVjdGlvbi4gQmxvY2tzIHVudGlsIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KICB7eyBhY2Nlc3MgfX0gZnVuYyBjbG9zZSgpIHRocm93cyB7CiAgICBsZXQgc2VtID0gRGlzcGF0Y2hTZW1hcGhvcmUodmFsdWU6IDApCiAgICB0cnkgc2VsZi5oYW5kbGVyLnNlbmRTdGF0dXMoc3RhdHVzQ29kZTpzZWxmLnN0YXR1c0NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZTpzZWxmLnN0YXR1c01lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdNZXRhZGF0YTpzZWxmLnRyYWlsaW5nTWV0YWRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbS5zaWduYWwoKQogICAgfQogICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogIH0KCiAgLy8vIFJ1biB0aGUgc2Vzc2lvbi4gSW50ZXJuYWwuCiAgZmlsZXByaXZhdGUgZnVuYyBydW4ocXVldWU6RGlzcGF0Y2hRdWV1ZSkgdGhyb3dzIHsKICAgIHRyeSBzZWxmLmhhbmRsZXIuc2VuZE1ldGFkYXRhKGluaXRpYWxNZXRhZGF0YTppbml0aWFsTWV0YWRhdGEpIHsKICAgICAgcXVldWUuYXN5bmMgewogICAgICAgIGRvIHsKICAgICAgICAgIHRyeSBzZWxmLnByb3ZpZGVyLnt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShzZXNzaW9uOnNlbGYpCiAgICAgICAgfSBjYXRjaCAobGV0IGVycm9yKSB7CiAgICAgICAgICBwcmludCgiZXJyb3IgXChlcnJvcikiKQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQo="
  45. templates["server-session-clientstreaming.swift"] = "Ly8ge3sgbWV0aG9kLm5hbWUgfX0gKENsaWVudCBTdHJlYW1pbmcpCnt7IGFjY2VzcyB9fSBjbGFzcyB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSA6IHt7IC58c2VydmljZTpmaWxlLHNlcnZpY2UgfX1TZXNzaW9uIHsKICBwcml2YXRlIHZhciBwcm92aWRlciA6IHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19CgogIC8vLyBDcmVhdGUgYSBzZXNzaW9uLgogIGZpbGVwcml2YXRlIGluaXQoaGFuZGxlcjpnUlBDLkhhbmRsZXIsIHByb3ZpZGVyOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fSkgewogICAgc2VsZi5wcm92aWRlciA9IHByb3ZpZGVyCiAgICBzdXBlci5pbml0KGhhbmRsZXI6aGFuZGxlcikKICB9CgogIC8vLyBSZWNlaXZlIGEgbWVzc2FnZS4gQmxvY2tzIHVudGlsIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBvciB0aGUgY2xpZW50IGNsb3NlcyB0aGUgY29ubmVjdGlvbi4KICB7eyBhY2Nlc3MgfX0gZnVuYyByZWNlaXZlKCkgdGhyb3dzIC0+IHt7IG1ldGhvZHxpbnB1dCB9fSB7CiAgICBsZXQgc2VtID0gRGlzcGF0Y2hTZW1hcGhvcmUodmFsdWU6IDApCiAgICB2YXIgcmVxdWVzdE1lc3NhZ2UgOiB7eyBtZXRob2R8aW5wdXQgfX0/CiAgICB0cnkgc2VsZi5oYW5kbGVyLnJlY2VpdmVNZXNzYWdlKCkgeyhyZXF1ZXN0RGF0YSkgaW4KICAgICAgaWYgbGV0IHJlcXVlc3REYXRhID0gcmVxdWVzdERhdGEgewogICAgICAgIHJlcXVlc3RNZXNzYWdlID0gdHJ5PyB7eyBtZXRob2R8aW5wdXQgfX0oc2VyaWFsaXplZERhdGE6cmVxdWVzdERhdGEpCiAgICAgIH0KICAgICAgc2VtLnNpZ25hbCgpCiAgICB9CiAgICBfID0gc2VtLndhaXQodGltZW91dDogRGlzcGF0Y2hUaW1lLmRpc3RhbnRGdXR1cmUpCiAgICBpZiByZXF1ZXN0TWVzc2FnZSA9PSBuaWwgewogICAgICB0aHJvdyB7eyAufHNlcnZlcmVycm9yOmZpbGUsc2VydmljZSB9fS5lbmRPZlN0cmVhbQogICAgfQogICAgcmV0dXJuIHJlcXVlc3RNZXNzYWdlIQogIH0KCiAgLy8vIFNlbmQgYSByZXNwb25zZSBhbmQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCiAge3sgYWNjZXNzIH19IGZ1bmMgc2VuZEFuZENsb3NlKF8gcmVzcG9uc2U6IHt7IG1ldGhvZHxvdXRwdXQgfX0pIHRocm93cyB7CiAgICB0cnkgc2VsZi5oYW5kbGVyLnNlbmRSZXNwb25zZShtZXNzYWdlOnJlc3BvbnNlLnNlcmlhbGl6ZWREYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOnNlbGYuc3RhdHVzQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c01lc3NhZ2U6c2VsZi5zdGF0dXNNZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdNZXRhZGF0YTpzZWxmLnRyYWlsaW5nTWV0YWRhdGEpCiAgfQoKICAvLy8gUnVuIHRoZSBzZXNzaW9uLiBJbnRlcm5hbC4KICBmaWxlcHJpdmF0ZSBmdW5jIHJ1bihxdWV1ZTpEaXNwYXRjaFF1ZXVlKSB0aHJvd3MgewogICAgdHJ5IHNlbGYuaGFuZGxlci5zZW5kTWV0YWRhdGEoaW5pdGlhbE1ldGFkYXRhOmluaXRpYWxNZXRhZGF0YSkgewogICAgICBxdWV1ZS5hc3luYyB7CiAgICAgICAgZG8gewogICAgICAgICAgdHJ5IHNlbGYucHJvdmlkZXIue3sgbWV0aG9kLm5hbWV8bG93ZXJjYXNlIH19KHNlc3Npb246c2VsZikKICAgICAgICB9IGNhdGNoIChsZXQgZXJyb3IpIHsKICAgICAgICAgIHByaW50KCJlcnJvciBcKGVycm9yKSIpCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9Cg=="
  46. templates["server-session-serverstreaming.swift"] = "Ly8ge3sgbWV0aG9kLm5hbWUgfX0gKFNlcnZlciBTdHJlYW1pbmcpCnt7IGFjY2VzcyB9fSBjbGFzcyB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSA6IHt7IC58c2VydmljZTpmaWxlLHNlcnZpY2UgfX1TZXNzaW9uIHsKICBwcml2YXRlIHZhciBwcm92aWRlciA6IHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19CgogIC8vLyBDcmVhdGUgYSBzZXNzaW9uLgogIGZpbGVwcml2YXRlIGluaXQoaGFuZGxlcjpnUlBDLkhhbmRsZXIsIHByb3ZpZGVyOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fSkgewogICAgc2VsZi5wcm92aWRlciA9IHByb3ZpZGVyCiAgICBzdXBlci5pbml0KGhhbmRsZXI6aGFuZGxlcikKICB9CgogIC8vLyBTZW5kIGEgbWVzc2FnZS4gTm9uYmxvY2tpbmcuCiAge3sgYWNjZXNzIH19IGZ1bmMgc2VuZChfIHJlc3BvbnNlOiB7eyBtZXRob2R8b3V0cHV0IH19LCBjb21wbGV0aW9uOiBAZXNjYXBpbmcgKCktPigpKSB0aHJvd3MgewogICAgdHJ5IGhhbmRsZXIuc2VuZFJlc3BvbnNlKG1lc3NhZ2U6cmVzcG9uc2Uuc2VyaWFsaXplZERhdGEoKSkge2NvbXBsZXRpb24oKX0KICB9CgogIC8vLyBSdW4gdGhlIHNlc3Npb24uIEludGVybmFsLgogIGZpbGVwcml2YXRlIGZ1bmMgcnVuKHF1ZXVlOkRpc3BhdGNoUXVldWUpIHRocm93cyB7CiAgICB0cnkgc2VsZi5oYW5kbGVyLnJlY2VpdmVNZXNzYWdlKGluaXRpYWxNZXRhZGF0YTppbml0aWFsTWV0YWRhdGEpIHsocmVxdWVzdERhdGEpIGluCiAgICAgIGlmIGxldCByZXF1ZXN0RGF0YSA9IHJlcXVlc3REYXRhIHsKICAgICAgICBkbyB7CiAgICAgICAgICBsZXQgcmVxdWVzdE1lc3NhZ2UgPSB0cnkge3sgbWV0aG9kfGlucHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlcXVlc3REYXRhKQogICAgICAgICAgLy8gdG8ga2VlcCBwcm92aWRlcnMgZnJvbSBibG9ja2luZyB0aGUgc2VydmVyIHRocmVhZCwKICAgICAgICAgIC8vIHdlIGRpc3BhdGNoIHRoZW0gdG8gYW5vdGhlciBxdWV1ZS4KICAgICAgICAgIHF1ZXVlLmFzeW5jIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIHRyeSBzZWxmLnByb3ZpZGVyLnt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShyZXF1ZXN0OnJlcXVlc3RNZXNzYWdlLCBzZXNzaW9uOiBzZWxmKQogICAgICAgICAgICAgIHRyeSBzZWxmLmhhbmRsZXIuc2VuZFN0YXR1cyhzdGF0dXNDb2RlOnNlbGYuc3RhdHVzQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZTpzZWxmLnN0YXR1c01lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nTWV0YWRhdGE6c2VsZi50cmFpbGluZ01ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOnt9KQogICAgICAgICAgICB9IGNhdGNoIChsZXQgZXJyb3IpIHsKICAgICAgICAgICAgICBwcmludCgiZXJyb3I6IFwoZXJyb3IpIikKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGxldCBlcnJvcikgewogICAgICAgICAgcHJpbnQoImVycm9yOiBcKGVycm9yKSIpCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9Cg=="
  47. templates["server-session-unary.swift"] = "Ly8ge3sgbWV0aG9kLm5hbWUgfX0gKFVuYXJ5KQp7eyBhY2Nlc3MgfX0gY2xhc3Mge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gOiB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvbiB7CiAgcHJpdmF0ZSB2YXIgcHJvdmlkZXIgOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fQoKICAvLy8gQ3JlYXRlIGEgc2Vzc2lvbi4KICBmaWxlcHJpdmF0ZSBpbml0KGhhbmRsZXI6Z1JQQy5IYW5kbGVyLCBwcm92aWRlcjoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0pIHsKICAgIHNlbGYucHJvdmlkZXIgPSBwcm92aWRlcgogICAgc3VwZXIuaW5pdChoYW5kbGVyOmhhbmRsZXIpCiAgfQoKICAvLy8gUnVuIHRoZSBzZXNzaW9uLiBJbnRlcm5hbC4KICBmaWxlcHJpdmF0ZSBmdW5jIHJ1bihxdWV1ZTpEaXNwYXRjaFF1ZXVlKSB0aHJvd3MgewogICAgdHJ5IGhhbmRsZXIucmVjZWl2ZU1lc3NhZ2UoaW5pdGlhbE1ldGFkYXRhOmluaXRpYWxNZXRhZGF0YSkgeyhyZXF1ZXN0RGF0YSkgaW4KICAgICAgaWYgbGV0IHJlcXVlc3REYXRhID0gcmVxdWVzdERhdGEgewogICAgICAgIGxldCByZXF1ZXN0TWVzc2FnZSA9IHRyeSB7eyBtZXRob2R8aW5wdXQgfX0oc2VyaWFsaXplZERhdGE6cmVxdWVzdERhdGEpCiAgICAgICAgbGV0IHJlcGx5TWVzc2FnZSA9IHRyeSBzZWxmLnByb3ZpZGVyLnt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShyZXF1ZXN0OnJlcXVlc3RNZXNzYWdlLCBzZXNzaW9uOiBzZWxmKQogICAgICAgIHRyeSBzZWxmLmhhbmRsZXIuc2VuZFJlc3BvbnNlKG1lc3NhZ2U6cmVwbHlNZXNzYWdlLnNlcmlhbGl6ZWREYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTpzZWxmLnN0YXR1c0NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZTpzZWxmLnN0YXR1c01lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdNZXRhZGF0YTpzZWxmLnRyYWlsaW5nTWV0YWRhdGEpCiAgICAgIH0KICAgIH0KICB9Cn0K"
  48. templates["server.pb.swift"] = "LyoKICogRE8gTk9UIEVESVQuCiAqCiAqIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLgogKiBTb3VyY2U6IHt7IGZpbGUubmFtZSB9fQogKgogKi8KCi8qCiAqIENvcHlyaWdodCAyMDE3LCBnUlBDIEF1dGhvcnMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCmltcG9ydCBGb3VuZGF0aW9uCmltcG9ydCBEaXNwYXRjaAppbXBvcnQgZ1JQQwppbXBvcnQgU3dpZnRQcm90b2J1ZgovLy17JSBmb3Igc2VydmljZSBpbiBmaWxlLnNlcnZpY2UgJX0KCi8vLyBUeXBlIGZvciBlcnJvcnMgdGhyb3duIGZyb20gZ2VuZXJhdGVkIHNlcnZlciBjb2RlLgp7eyBhY2Nlc3MgfX0gZW51bSB7eyAufHNlcnZlcmVycm9yOmZpbGUsc2VydmljZSB9fSA6IEVycm9yIHsKICBjYXNlIGVuZE9mU3RyZWFtCn0KCi8vLyBUbyBidWlsZCBhIHNlcnZlciwgaW1wbGVtZW50IGEgY2xhc3MgdGhhdCBjb25mb3JtcyB0byB0aGlzIHByb3RvY29sLgp7eyBhY2Nlc3MgfX0gcHJvdG9jb2wge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0gewogIC8vLXslIGZvciBtZXRob2QgaW4gc2VydmljZS5tZXRob2QgJX0KICAvLy17JSBpZiBub3QgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbm90IG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KICBmdW5jIHt7IG1ldGhvZC5uYW1lfGxvd2VyY2FzZSB9fShyZXF1ZXN0IDoge3sgbWV0aG9kfGlucHV0IH19LCBzZXNzaW9uIDoge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0pIHRocm93cyAtPiB7eyBtZXRob2R8b3V0cHV0IH19CiAgLy8teyUgZW5kaWYgJX0KICAvLy17JSBpZiBub3QgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbWV0aG9kLnNlcnZlclN0cmVhbWluZyAlfQogIGZ1bmMge3sgbWV0aG9kLm5hbWV8bG93ZXJjYXNlIH19KHJlcXVlc3QgOiB7eyBtZXRob2R8aW5wdXQgfX0sIHNlc3Npb24gOiB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSkgdGhyb3dzCiAgLy8teyUgZW5kaWYgJX0KICAvLy17JSBpZiBtZXRob2QuY2xpZW50U3RyZWFtaW5nIGFuZCBub3QgbWV0aG9kLnNlcnZlclN0cmVhbWluZyAlfQogIGZ1bmMge3sgbWV0aG9kLm5hbWV8bG93ZXJjYXNlIH19KHNlc3Npb24gOiB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSkgdGhyb3dzCiAgLy8teyUgZW5kaWYgJX0KICAvLy17JSBpZiBtZXRob2QuY2xpZW50U3RyZWFtaW5nIGFuZCBtZXRob2Quc2VydmVyU3RyZWFtaW5nICV9CiAgZnVuYyB7eyBtZXRob2QubmFtZXxsb3dlcmNhc2UgfX0oc2Vzc2lvbiA6IHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KSB0aHJvd3MKICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGVuZGZvciAlfQp9CgovLy8gQ29tbW9uIHByb3BlcnRpZXMgYXZhaWxhYmxlIGluIGVhY2ggc2VydmljZSBzZXNzaW9uLgp7eyBhY2Nlc3MgfX0gY2xhc3Mge3sgLnxzZXJ2aWNlOmZpbGUsc2VydmljZSB9fVNlc3Npb24gewogIGZpbGVwcml2YXRlIHZhciBoYW5kbGVyIDogZ1JQQy5IYW5kbGVyCiAge3sgYWNjZXNzIH19IHZhciByZXF1ZXN0TWV0YWRhdGEgOiBNZXRhZGF0YSB7IHJldHVybiBoYW5kbGVyLnJlcXVlc3RNZXRhZGF0YSB9CgogIHt7IGFjY2VzcyB9fSB2YXIgc3RhdHVzQ29kZSA6IEludCA9IDAKICB7eyBhY2Nlc3MgfX0gdmFyIHN0YXR1c01lc3NhZ2UgOiBTdHJpbmcgPSAiT0siCiAge3sgYWNjZXNzIH19IHZhciBpbml0aWFsTWV0YWRhdGEgOiBNZXRhZGF0YSA9IE1ldGFkYXRhKCkKICB7eyBhY2Nlc3MgfX0gdmFyIHRyYWlsaW5nTWV0YWRhdGEgOiBNZXRhZGF0YSA9IE1ldGFkYXRhKCkKCiAgZmlsZXByaXZhdGUgaW5pdChoYW5kbGVyOmdSUEMuSGFuZGxlcikgewogICAgc2VsZi5oYW5kbGVyID0gaGFuZGxlcgogIH0KfQoKLy8teyUgZm9yIG1ldGhvZCBpbiBzZXJ2aWNlLm1ldGhvZCAlfQovLy17JSBpZiBub3QgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbm90IG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KLy8teyUgaW5jbHVkZSAic2VydmVyLXNlc3Npb24tdW5hcnkuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGlmIG5vdCBtZXRob2QuY2xpZW50U3RyZWFtaW5nIGFuZCBtZXRob2Quc2VydmVyU3RyZWFtaW5nICV9Ci8vLXslIGluY2x1ZGUgInNlcnZlci1zZXNzaW9uLXNlcnZlcnN0cmVhbWluZy5zd2lmdCIgJX0KLy8teyUgZW5kaWYgJX0KLy8teyUgaWYgbWV0aG9kLmNsaWVudFN0cmVhbWluZyBhbmQgbm90IG1ldGhvZC5zZXJ2ZXJTdHJlYW1pbmcgJX0KLy8teyUgaW5jbHVkZSAic2VydmVyLXNlc3Npb24tY2xpZW50c3RyZWFtaW5nLnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBpZiBtZXRob2QuY2xpZW50U3RyZWFtaW5nIGFuZCBtZXRob2Quc2VydmVyU3RyZWFtaW5nICV9Ci8vLXslIGluY2x1ZGUgInNlcnZlci1zZXNzaW9uLWJpZGlzdHJlYW1pbmcuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGVuZGZvciAlfQoKLy8vIE1haW4gc2VydmVyIGZvciBnZW5lcmF0ZWQgc2VydmljZQp7eyBhY2Nlc3MgfX0gY2xhc3Mge3sgLnxzZXJ2ZXI6ZmlsZSxzZXJ2aWNlIH19IHsKICBwcml2YXRlIHZhciBhZGRyZXNzOiBTdHJpbmcKICBwcml2YXRlIHZhciBzZXJ2ZXI6IGdSUEMuU2VydmVyCiAgcHJpdmF0ZSB2YXIgcHJvdmlkZXI6IHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19PwoKICAvLy8gQ3JlYXRlIGEgc2VydmVyIHRoYXQgYWNjZXB0cyBpbnNlY3VyZSBjb25uZWN0aW9ucy4KICB7eyBhY2Nlc3MgfX0gaW5pdChhZGRyZXNzOlN0cmluZywKICAgICAgICAgICAgICBwcm92aWRlcjp7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fSkgewogICAgZ1JQQy5pbml0aWFsaXplKCkKICAgIHNlbGYuYWRkcmVzcyA9IGFkZHJlc3MKICAgIHNlbGYucHJvdmlkZXIgPSBwcm92aWRlcgogICAgc2VsZi5zZXJ2ZXIgPSBnUlBDLlNlcnZlcihhZGRyZXNzOmFkZHJlc3MpCiAgfQoKICAvLy8gQ3JlYXRlIGEgc2VydmVyIHRoYXQgYWNjZXB0cyBzZWN1cmUgY29ubmVjdGlvbnMuCiAge3sgYWNjZXNzIH19IGluaXQ/KGFkZHJlc3M6U3RyaW5nLAogICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZVVSTDpVUkwsCiAgICAgICAgICAgICAgIGtleVVSTDpVUkwsCiAgICAgICAgICAgICAgIHByb3ZpZGVyOnt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19KSB7CiAgICBnUlBDLmluaXRpYWxpemUoKQogICAgc2VsZi5hZGRyZXNzID0gYWRkcmVzcwogICAgc2VsZi5wcm92aWRlciA9IHByb3ZpZGVyCiAgICBndWFyZAogICAgICBsZXQgY2VydGlmaWNhdGUgPSB0cnk/IFN0cmluZyhjb250ZW50c09mOiBjZXJ0aWZpY2F0ZVVSTCwgZW5jb2Rpbmc6IC51dGY4KSwKICAgICAgbGV0IGtleSA9IHRyeT8gU3RyaW5nKGNvbnRlbnRzT2Y6IGtleVVSTCwgZW5jb2Rpbmc6IC51dGY4KQogICAgICBlbHNlIHsKICAgICAgICByZXR1cm4gbmlsCiAgICB9CiAgICBzZWxmLnNlcnZlciA9IGdSUEMuU2VydmVyKGFkZHJlc3M6YWRkcmVzcywga2V5OmtleSwgY2VydHM6Y2VydGlmaWNhdGUpCiAgfQoKICAvLy8gU3RhcnQgdGhlIHNlcnZlci4KICB7eyBhY2Nlc3MgfX0gZnVuYyBzdGFydChxdWV1ZTpEaXNwYXRjaFF1ZXVlID0gRGlzcGF0Y2hRdWV1ZS5nbG9iYWwoKSkgewogICAgZ3VhcmQgbGV0IHByb3ZpZGVyID0gc2VsZi5wcm92aWRlciBlbHNlIHsKICAgICAgZmF0YWxFcnJvcigpIC8vIHRoZSBzZXJ2ZXIgcmVxdWlyZXMgYSBwcm92aWRlcgogICAgfQogICAgc2VydmVyLnJ1biB7KGhhbmRsZXIpIGluCiAgICAgIHByaW50KCJTZXJ2ZXIgcmVjZWl2ZWQgcmVxdWVzdCB0byAiICsgaGFuZGxlci5ob3N0CiAgICAgICAgKyAiIGNhbGxpbmcgIiArIGhhbmRsZXIubWV0aG9kCiAgICAgICAgKyAiIGZyb20gIiArIGhhbmRsZXIuY2FsbGVyCiAgICAgICAgKyAiIHdpdGggIiArIFN0cmluZyhkZXNjcmliaW5nOmhhbmRsZXIucmVxdWVzdE1ldGFkYXRhKSApCgogICAgICBkbyB7CiAgICAgICAgc3dpdGNoIGhhbmRsZXIubWV0aG9kIHsKICAgICAgICAvLy17JSBmb3IgbWV0aG9kIGluIHNlcnZpY2UubWV0aG9kICV9CiAgICAgICAgY2FzZSAie3sgLnxwYXRoOmZpbGUsc2VydmljZSxtZXRob2QgfX0iOgogICAgICAgICAgdHJ5IHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KGhhbmRsZXI6aGFuZGxlciwgcHJvdmlkZXI6cHJvdmlkZXIpLnJ1bihxdWV1ZTpxdWV1ZSkKICAgICAgICAvLy17JSBlbmRmb3IgJX0KICAgICAgICBkZWZhdWx0OgogICAgICAgICAgYnJlYWsgLy8gaGFuZGxlIHVua25vd24gcmVxdWVzdHMKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGxldCBlcnJvcikgewogICAgICAgIHByaW50KCJTZXJ2ZXIgZXJyb3I6IFwoZXJyb3IpIikKICAgICAgfQogICAgfQogIH0KfQovLy17JSBlbmRmb3IgJX0K"
  49. return templates
  50. }